进程,是目前计算机中为应用程序分配资源的最小单位;

线程,是目前计算机中运行应用程序的最小单位;

在实际系统中,其实进程都是被分为线程来实现的,所以参与时间片轮转的是线程

  但是管理应用程序的资源的单位和任务调度的单位都是进程。更像是一个逻辑概念。

线程是进程分出来的更精细的单位,线程间的上下文切换比进程间的上下文切换,要快很多。

  

多进程与多核,这个概念很奇怪,因为进程是不会直接在核心上运行的。

多线程与多核,涉及一个内核线程与用户线程的对应关系

内核线程(Kernel Thread),一般与核心是一一对应的,一个处理核心对应一个内核进程。

目前的计算机,配置一般都是超线程的,即通过硬件冗余,将一个物理核心模拟成两个逻辑处理核心

  对应两个内核线程。所以在操作系统中看到的CPU是实际物理核心的两倍。

  如双核四线程,四核八线程

------------------------------------------------------------------------

  intel的cpu为了实现分支预测等技术,一般每个内核的运算单元是双份的,-------超线程

  服务器方面的物理核心的运算单位,可能会更多,支持更大的超线程

------------------------------------------------------------------------

用户线程与内核线程的对应关系:

  1) 一一对应,由于内核线程很少,所以限制了很多用户线程的执行数量;

  2) 多对一,用户线程很慢,影响调度;

  3) 多对多,目前应用的模式,

  

python中的多进程库,multiprocessing,提供的方法和属性:

属性:authkey,daemon(父进程终止后,自动结束子进程,必须在start之前设置),exitcode,name,pid

方法: Process(target,name,args,kwargs),创建进程对象

    is_live(),进程状态

    join('timeout'),表示等待后台的进程运行结束,如果指定timeout,一定时间后,杀掉进程

    run(),

    start(),

    terminate(),

    join(),等所有的后台子进程执行好;

    cpu_count(),返回当前拥有的cpu的个数,超线程之后的。

进程创建时,target可以指定为一个函数,也可以直接例化一个进程class。

创建函数process:

    

创建class进程,start()之后,会自动调用run()函数:

    

加入daemon属性:并不会等到该worker的process结束,程序就执行结束了。

    

多进程遍历:active_children()

    

还可以加入lock,semaphore,实现对共享资源的控制,event,进程间通信。

  还有进程队列(Queue),和进程管道(Pipe)

Pool,进程池,不需要自己在管理进程的数量,进程池自动管理。

    如果池中的进程数量达到阈值,阻塞其他进程。

参考博客

https://www.cnblogs.com/kaituorensheng/p/4445418.html

python中的多线程,好像不是特别的好用,python内部有一个global interpreter lock(GIL),它阻碍了

  python的多线程程序的同时运行。python中也有多线程的模块,threading模块。

有人做过实验,在CPU密集型的任务中,多线程并不能有多少效率上的提升,反而因为上下文的切换,降低效率。

                 而多进程,可以在多个core中并行的跑,效率会提高。

       在IO密集型的任务中,多线程和多进程,都会带来性能的提高。

       在网络请求密集型的任务中,多线程与多进程,相差无几。

多进程可以发挥多核芯片的性能,在一个进程中,可以在实现多线程的操作,来频繁调度,防止IO的阻塞。

python多线程,多进程编程。的更多相关文章

  1. Python多线程多进程那些事儿看这篇就够了~~

    自己以前也写过多线程,发现都是零零碎碎,这篇写写详细点,填一下GIL和Python多线程多进程的坑~ 总结下GIL的坑和python多线程多进程分别应用场景(IO密集.计算密集)以及具体实现的代码模块 ...

  2. Python多线程多进程

    一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...

  3. python多线程网络编程

    背景 使用过flask框架后,我对request这个全局实例非常感兴趣.它在客户端发起请求后会保存着所有的客户端数据,例如用户上传的表单或者文件等.那么在很多客户端发起请求时,服务器是怎么去区分不同的 ...

  4. Python的多进程编程

    Python在2.6引入了多进程的机制,并提供了丰富的组件及api以方便编写并发应用.multiprocessing包的组件Process, Queue, Pipe, Lock等组件提供了与多线程类似 ...

  5. python学习笔记(十六)-Python多线程多进程

    一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...

  6. python 多线程网络编程 ( 二 )

    背景 我在[第一篇文章中]已经介绍了如何实现一个多线程的todo应用,接下来我将会研究如何使这个服务器完成下面这几个功能. 1.使用正则表达式解析用户发送的请求数据: 2.使用ThreadLocal技 ...

  7. python多线程/多进程

    thread和threading的区别 threading相对与thread是更高级别的线程管理模块 thread和threading模块中的一些属性会有冲突 thread模块拥有的同步原因实际上只有 ...

  8. python中的多线程和多进程编程

    注意:多线程和多线程编程是不同的!!! 第一点:一个进程相当于一个要执行的程序,它会开启一个主线程,多线程的话就会再开启多个子线程:而多进程的话就是一个进程同时在多个核上进行: 第二点:多线程是一种并 ...

  9. Python多进程编程

    转自:Python多进程编程 阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiproces ...

  10. 多线程&多进程解析:Python、os、sys、Queue、multiprocessing、threading

    当涉及到操作系统的时候,免不了要使用os模块,有时还要用到sys模块. 设计到并行程序,一般开单独的进程,而不是线程,原因是python解释器的全局解释器锁GIL(global interpreter ...

随机推荐

  1. [development][semaphore] 信号量/信号灯/信号标/旗语

    前言: 接续前节 [development][C] 条件变量(condition variables)的应用场景是什么 之前讨论了条件变量的问题, 已经知道在逻辑上, 条件变量(管程)(moniter ...

  2. Struts2中.properties文件放置路径(classpath)

    一.web应用的classpath简介   classpath路径,即WEB-INF下面的classes目录,所有src目录下面的java.xml.properties等文件编译后都会在此. Stru ...

  3. golang的json数据解析

    import (     "fmt"     "time"     "github.com/astaxie/beego"     " ...

  4. thinkphp模板使用

    1.模板文件 就是个html,可以保存到View的Public文件夹下,比如叫base.html(参考onethink) <block name="a">a</b ...

  5. (4.21)sql server中复制查询结果集

    在查询结果窗口中复制列标题似乎是一项简单的任务,但对于业余爱好者来说,这可能是一场噩梦. 没有可见的指令/链接/按钮,其中一个可以使用列标题单击和复制所选数据.让我们看看如何在SQL Server M ...

  6. 帝国cms面包屑导航的首页链接锚文本改成关键字

    帝国cms面包屑导航的首页链接关键字一般都是“首页”二字或home,如果你想从这里提高锚文字的相关性,可以改成相应的关键字,那么如何来修改呢? 我们知道帝国CMS面包屑导航的变量是[!--newsna ...

  7. mysql实时增量备份

    采用binlog日志的好处 掌控所有更改操作,必要时可用于恢复数据 数据库主从复制的必要条件 [root@localhost~]# vim /etc/my.cnf [mysqld] .. .. log ...

  8. 怎么修改TOMCAT的默认主页为你自己项目的主页

    如果webapp下有一个abc的文件来下有一个index.html,想设置为首页怎么操作 方法: 修改tomcat/conf/web.xml文件.在web.xml文件中,有一段如下:<welco ...

  9. 这套方法论,彻底终结MySQL同步延迟问题

    作者介绍 张秀云,网名飞鸿无痕,现任职于腾讯,负责腾讯金融数据库的运维和优化工作.2007年开始从事运维方面的工作,经历过网络管理员.Linux运维工程师.DBA.分布式存储运维等多个IT职位.对Li ...

  10. C++读取dll文件所在目录

    ////保证config.txt从本DLL目录位置读取 //获取DLL自身所在路径(此处包括DLL文件名) }; GetModuleFileNameA((HINSTANCE)&__ImageB ...