多线程多进程以及python中的实现

2020-10-31  本文已影响0人  DUTZCS

多线程和多进程

通常在硬件层面上和操作系统层面上都存在线程的概念。但是这两个概念是完全不同的,是一个词汇在不同层面上的不同意思。

CPU数,核心数,硬件的线程数

所以系统总的核心数实际上是上面所有的乘积。也就是逻辑处理器数量= CPU数* 核心数 * 超线程数(SMT or HT) 。

最后在硬件层面上其实线程和进程是一样的,指的就是几个核心或者存在超线程时候的总的线程数。

Linux查看以上信息的命令,lscpu或者到/proc/cpuinfo查看。

Windows可以直接看任务管理器。

操作系统层面的进程和线程

  1. 操作系统层面上(不严格讲)
  1. 举例来说,打开一个应用程序,比如word,就会启动一个或者多个进程,每个进程执行一个任务,同时为了执行一个任务可能需要多个子任务,这些子任务就是线程。比如写入word时候需要自动保存也需要拼写检查,这就是同一个进程下的不同的线程。

  2. 操作系统层面的多进程和多线程指的是,基于单核没有超线程的CPU来说,操作系统会调度这些进程或者线程进行极短时间内的切换,以至于我们看不出来是切换的。所以任务是同时的。所以单核当CPU没办法实现真正的并行,单次或者每个时间只能进行一个线程或者进程,但是只要我切换的够快,时间就追不上我。还需要注意,一般我们使用程序数量远远多于计算机总的逻辑处理器数量,所以即便对于多核CPU来说,系统的切换也是极其重要的。

  3. 进程和线程本质是一个包含的关系,所以多进程和多线程机制是不同的,比如同一个进程内的多线程可以共享内存等等资源,通信也更加简单,每个线程需要自己的堆栈寄存器,所以占用资源少,多进程就是相对独立的,需要更多的内存等。所以分为多线程,多进程,和多线程多进程三种。多线程是指在一个进程中存在多个线程。

python的多进程(多线程)

python数值计算应该使用多进程的,对于计算密集型的,这样比较稳定稳定可靠,另外多线程对于有些变量会交错使用,导致结果容易错误。I/O密集型的大部分都在等待写入到硬盘时间, 对于I/O密集型的可以用多线程。另外python还有GIL。

多进程

多线程

一般来说用计算过程中多进程就够了。

python中qutip的并行

最后

Linux 并行嵌套会报错,子进程不能有守护进程。但是可以在循环之内写并行。

上一篇 下一篇

猜你喜欢

热点阅读