python的协程和多线程,python多线程开发

  python的协程和多线程,python多线程开发

  而进程和线程到底是什么?如何使用进程和线程?在什么场景下需要使用进程和线程?什么是谢成?进程和线程的关系和区别是什么?

  程序切换——CPU时间分配首先,我们的任何程序都需要运行在一个操作系统中,比如Windows XP、Red Hat Linux、FreeBSD、AIX等。

  其次,操作系统中运行的程序不止一个,而是数百个具有不同功能的程序,如键盘驱动程序、显示器驱动程序、HTTP服务、游戏、聊天、网页.

  最后,CPU等资源有限。在这几百个程序中,不可能每个程序占用一个CPU运行,也不可能每个程序短时间只运行一次。

  那么如何给应用分配CPU、内存等资源呢?

  程序切换是指操作系统自动为每个程序分配CPU/内存/磁盘/键盘/显示器等部分资源的使用时间,到期后自动切换到下一个程序。

  当然,如果切换的程序没有完成,它的状态将被保存,以便下次轮询时可以继续执行。

  其实这个切换是很快的(毫秒级),所以我们感觉不到,好像电脑可以很自然的同时执行多个软件。

  过程是这种“程序切换”的第一种方式。

  进程是执行中的计算机程序。也就是说,每个代码执行的时候,一开始它本身就是一个进程。

  一个进程有:就绪、运行、中断、死、结束等状态(不同的操作系统不一样)。

  用用户写的代码(代码本身作为进程运行)启动程序,进入进程的“就绪”状态,操作系统调度资源,进行“程序切换”,这样进程就会进入“运行中”状态。当程序结束/中断时,程序会进入“结束”状态,但操作系统会满足“程序切换”的要求,进入“中断”状态,等待下一个预定时间执行各个特性。操作系统本身自动管理所有进程(无需用户代码干预),合理分配这些进程的可执行时间。进程可以派生新的进程来执行其他任务,但是每个进程仍然有自己的内存和数据堆栈。进程间可以通信(发送消息和数据),采用进程间通信(IPC)的方法。它表明多个进程可以在不同的CPU上运行,而不会相互干扰。在同一个CPU上,可以运行多个进程,操作系统可以自动分配时间片。因为进程间的资源不能共享,所以需要进程间通信来发送数据和接收消息,这也叫“并行”。

  更多信息

  Linux下的进程获取

  线程也是一种“程序切换”的方式。

  线程是在进程中执行的代码。

  一个进程可以运行多个线程,这些线程共享主进程中应用的操作系统资源。

  当在一个进程中启动多个线程时,每个线程都按顺序执行。在目前的操作系统中,还支持线程抢占,也就是说,其他等待运行的线程可以通过优先级、信号等方式挂起正在运行的线程。并首先运行它。

  用户编写包含线程的程序(每个程序本身就是一个进程)。操作系统“程序切换”进入当前进程。如果当前进程包含线程,则启动多个线程,这些线程将按顺序执行。除非特征线程被抢占,否则正在运行的线程必须在现有进程中启动。使用进程获得的系统资源,不会像进程一样需要申请CPU等资源。不能给线程一个公平的执行时间,但是它可以被其他线程抢占。该进程根据操作系统的设置分配执行时间。在每个进程中,可以启动许多线程来说明多线程,这也称为“并发”执行。

  阅读更多信息:

  Linux下的线程获取方法

  进程和线程的区别进程中的每个线程都与主进程共享相同的资源。与进程无关相比,线程之间更容易共享信息和相互通信(它们都在进程中,共享内存等。).

  通常,线程是并发执行的。正是由于这种并发和数据共享的机制,多个任务之间的协作才成为可能。

  一般来说,进程是并行执行的,这使得程序可以同时在多个CPU上运行;

  不同于多线程只能在一个进程申请的“时间片”内运行(一个CPU中的一个进程启动多个线程,线程调度共享这个进程的可执行时间片),一个进程可以真正实现程序的“同时”运行(多个CPU同时运行)。

  以及进程和线程的常见应用场景。总的来说,用Python写并发程序的经验:

  计算密集型任务使用多进程。IO密集型任务(如网络通信)使用多线程,很少使用多进程。这是因为IO操作需要独占资源,例如:

  网络通讯(微观-一次只能一个人说话,宏观-看起来像是同时聊天)一次只能一个人说话,同时只能有一个程序读写文件(如果两个程序同时向同一个文件写 a 和 b ,哪个写到文件?)都需要控制资源。一次只能使用一个程序。多线程中,主进程申请IO资源,多线程逐个执行。即使抢占了,也是一个一个的跑。感觉“多线程”是并发执行的。

  如果有多个进程,除非一个进程结束,否则另一个进程根本无法使用。显然,多个进程会“浪费”资源。

  当然,以上解释可能不足以立即理解问题。让我们通过不断的练习来体会“门道”。

  程也是一种“程序切换”。

  这里有一个特殊的“线程”,即协程的概念。

  简单来说,协同学的定义也是线程,但协同学的调度不是操作系统调度,而是自己“协同调度”。即“一个进程就是一个不被操作系统调度的线程”。当然,实际上要比这复杂得多。本课程不研究协同技术。对于这种具有挑战性的技术,在我们完全掌握了流程线程之后,自然会明白问题的由来。

  协进程,也称为微线程。

  解释协同学的主要特征是:

  协同进程间的协同调度,使得协同进程在并发数万以上时性能远高于线程。

  注意,这里也是“并发”,不是“并行”。

  涉及

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: