1、多线程

  线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位,一个进程可以包含多个线程。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。本质上CPU同一时刻只干了一件事,只能执行一个线程。一个线程是一个execution context(执行上下文),即一个cpu执行时所需要的一串指令。

  并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。

2、多进程

  一个程序的执行实例就是一个进程。每一个进程提供执行程序所需的所有资源。(进程本质上是资源的集合)

  每一个进程启动时都会最先产生一个线程,即主线程。然后主线程会再创建其他的子线程。

  某个线程想要执行,必须先拿到GIL(全局解释器锁),我们可以把GIL看作是“通行证”,并且在一个python进程中,GIL只有一个。拿不到通行证的线程,就不允许进入CPU执行。每次释放GIL锁,线程进行锁竞争、切换线程,会消耗资源。并且由于GIL锁存在,python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行),这就是为什么在多核CPU上,python的多线程效率并不高。

  每个进程有各自独立的GIL,互不干扰,这样就可以真正意义上的并行执行,所以在python中,多进程的执行效率优于多线程(仅仅针对多核CPU而言)。        
                                
  所以在这里说结论:多核下,想做并行提升效率,比较通用的方法是使用多进程,能够有效提高执行效率        

3、线程和进程的区别

(1)线程共享内存空间;进程的内存是独立的

(2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现

(3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆

(4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程

(5)改变主线程(如优先权),可能会影响其它线程;改变父进程,不影响子进程

最新文章

  1. nginx跨域配置
  2. Python包的相对导入时出现错误的解决方法
  3. 安卓第十三天笔记-服务(Service)
  4. 【Android 界面效果36】Fragment管理
  5. 自己利用jQuery实现的win8图标浮动更新
  6. oracle交集,并集,差集
  7. MVC View基础
  8. crontab 配置
  9. 详解VB.net编写DLL(动态链接库、应用程序扩展)文件
  10. Android 根据规划 Touch 分配和消费机制的事件
  11. 1,入门-Hello Soring Boot
  12. 面向对象写的简单的colors rain
  13. Alibaba Cluster Data 开放下载:270GB 数据揭秘你不知道的阿里巴巴数据中心
  14. go-无法下载websocket的问题
  15. golang []byte和string相互转换
  16. laravel5.4中验证与错误提示设置
  17. C++学习(十九)(C语言部分)之 指针3
  18. react如何引入外部文件的整理
  19. hdu1224 dp(dp + 栈/父亲数组记录路径)
  20. Linux 下用 smartd 监测硬盘状况

热门文章

  1. XShell安装(五)
  2. 【转】@javax.ws.rs Webservice注解
  3. python函数回顾:min()
  4. http请求设置setConnectTimeout()方法超时无响应
  5. Oracle学习笔记—数据字典和常用命令(转载)
  6. FTP主动连接与被动连接
  7. AJAX实现弹窗显示详情,全选和批量删除
  8. 每天一个Linux命令(42)watch命令
  9. 每日练习level-7
  10. Python编程-编码、变量、数据类型