zoukankan      html  css  js  c++  java
  • 多进程(multi_processes),多线程(multi_threaded),并发与并行

    多进程
    就是多任务同时运行,比如人可以三心二意一样,他的实现机制就是并发。但是计算机cpu实际上在一个时间点只能执行一个任务,因此并发可以理解为时间轮转调度运行方式,即按次序不断切换执行多个任务,但是每次切换都很快,感觉不到任务的暂停。实际上还是一心一意。每个进程至少含有一个线程。

    多线程:线程是进程的细分,多线程是指一个进程(任务)又可以分成他不用的部分来执行。

    cpu又分为单核心和多核心。每个核心只能执行一个线程。

    并行:多进程(多任务)同时运行,真正的同时多任务。只有多核cpu线程可以并行,多cpu进程可以并行。
    并发:单CPU单核中线程只能并发,进程也只能并发

    无论是并发还是并行,使用者看到的都是多进程,多线程。

    首先,将系统的线程和cpu的线程分开,我们说cpu是4核8线程(这里指cpu最多可以同时运行8条指令集bytecode)
    因此,多进程(每个进程只有一个线程)就是大家(线程)不在一个桌子上干活(每个桌子都有一份完整的材料--内存占用大);  多线程就是在一个桌子干活,材料都是共享的

    线程是操作系统直接支持的最小执行单元.
    任何进程默认就会启动一个线程,我们把该线程称为主线程,主线程又可以启动新的线程(子线程),Python的threading模块有个current_thread()函数,它永远返回当前线程的实例。
    python每个进程有一个全局锁,因此不管这个进程下是几个线程,都只能同时存在一个在执行的线程.
    当然,多进程是可以真正实现多线程,因为此时由多个解释器,每个解释器一个GIL.

    master-workers机制:master就是多线程的主线程,主要是分配任务,而workers为其他子线程.
    IO任务:从硬盘或者网口等读写任务(除cpu和主存外的那些更慢的读写任务)

    因此对于IO任务来说:python的多线程还凑乎.(python本身就是---真正运行起来时为单核单线程,核心再多也白瞎)
    对所有面向I/O的(会调用内建的操作系统C代码的)程序来说,GIL会在这个I/O调用之前被释放,以允许其他线程在这个线程等待I/O的时候运行。
    如果某线程并未使用很多I/O操作,它会在自己的时间片内一直占用处理器和GIL。也就是说,I/O密集型的Python程序比计算密集型的Python程序更能充分利用多线程的好处。

    python的多线程的queue是线程安全的!----即比如.put操作,如果消息队列中暂时是满的,则.put会暂时被阻塞.

    Python多进程和多线程哪个快?

    • 对CPU密集型代码(比如循环计算) - 多进程效率更高
    • 对IO密集型代码(比如文件操作,网络爬虫) - 多线程效率更高。

    为什么是这样呢?其实也不难理解。
    对于IO密集型操作,大部分消耗时间其实是等待时间,在等待时间中CPU是不需要工作的,
    那你在此期间提供双CPU资源也是利用不上的,相反对于CPU密集型代码,2个CPU干活肯定比一个CPU快很多。
    那么为什么多线程会对IO密集型代码有用呢?这时因为python碰到IO等待会释放GIL供新的线程使用,实现了线程间的切换。

    但是python3中对于IO有了更好的协程来解决.

    https://www.cnblogs.com/zhangchaocoming/p/12583639.html

    https://blog.csdn.net/zhengyshan/article/details/80641770

    https://cloud.tencent.com/developer/article/1193691

    https://www.cnblogs.com/klb561/p/10759477.html

  • 相关阅读:
    『Asp.Net 组件』第一个 Asp.Net 服务器组件:自己的文本框控件
    『Asp.Net 组件』Asp.Net 服务器组件 的开发优势和劣势
    『开源』简单的代码统计工具 开源啦[有图有真相]
    文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: FormMain --- 未能加载基类
    DB2:FETCH FIRST 1 ROWS ONLY
    IEnumerable的几个简单用法
    一个字符串中包含逗号个数
    字符串处理总结之一(C#String类)
    C# 中DateTime的各种使用
    C# 键值对类相关
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/12725260.html
Copyright © 2011-2022 走看看