
系统编程
图 南
这个作者很懒,什么都没留下…
展开
-
python 里的僵尸进程和孤儿进程
来谈谈进程里的僵尸和孤儿孤儿进程:父进程先于子进程退出,此时子进程就被成为孤儿进程。特点:孤儿进程会被系统进程收养,此时系统进程就变成了孤儿进程的父进程,孤儿进程退出,该进程自动退出。僵尸进程:子进程先于父进程退出,父进程又没有处理子进程的退出状态,此时子进程就会成为僵尸进程。特点:僵尸进程虽然结束,但是会残留部分进程信息在内存中,大量的僵尸进程会浪费系统的内存资源。 如何避免僵尸进程: 1. 使用 join() 回收 2. 在父进程中使用 signal() 方法回收 f原创 2020-08-04 11:44:54 · 439 阅读 · 0 评论 -
python的那些锁
python 锁的作用及分类锁就是 python 提供的对线程控制的对象死锁:死锁就是若干的子线程在系统资源竞争时,都在等待对方先释放自己所需要的资源,结果谁也不先解锁,互相干等着,导致程序无法执行下去,这就是死锁。互斥锁:因为同一进程中所有线程的是数据共享的,可能就会发生一个线程操作一个资源尚未结束时,另外一个线程已经对其进行了修改,导致最终结果出现错误,此时就需要对被操作对象添加互斥锁。保证每个线程对该资源的操作都能得到正确的结果。GIL锁:GIL 锁即全局解释器锁,只在 cpython 里才原创 2020-08-04 11:07:37 · 192 阅读 · 0 评论 -
同步、异步、阻塞、非阻塞
同步、异步、阻塞、非阻塞同步:同步即多个任务之间有顺序的执行,一个执行完,才能执行下一个。异步:异步即多个任务之间没有先后顺序,可以同时执行,像经典的 celery 框架,有时候一个任务可能要在必要的时候获取另外一个任务的结果,我们称这个为回调。阻塞:就是说如果卡住了调用者,调用者不能往下执行了,就是说调用者阻塞住了。非阻塞:如果不会卡住,可以继续执行,就是说非阻塞。...原创 2020-07-29 17:42:39 · 93 阅读 · 0 评论 -
到底应该怎么区分多进程、多线程和协程
到底应该怎么区分多进程、多线程和协程进程:进程是系统资源分配的最小单位,一个运行的程序(代码)就是一个进程,它拥有自己独立的内存空间,所以进程间数据不共享,开销比较大。进程是并行执行,即同一时刻多个任务可以同时运行,多进程适合 CPU 密集型操作情况,CPU密集型大部份时间用来做计算、逻辑判断等 CPU 动作。实现(多进程)并行的库有:multiprocessing线程:调度执行的最小单位,也叫执行路径,不能独立存在,一个进程至少有一个线程,叫主线程,多个线程之间数据共享,极大地提高了程原创 2020-07-29 17:08:12 · 473 阅读 · 0 评论 -
多线程竞争该怎么解决?
多线程竞争该怎么解决?因为线程是非独立的,同一个进程里的线程共享这个进程里的所有数据,当各个线程访问数据资源时,可能就会出现竞争状态。即: 数据几乎同时会被多个线程占用,造成数据混乱 ,即所谓的线程不安全解决多线程竞争问题的方法就是上锁。锁的好处:确保了某段关键代码(共享数据资源)只能由一个线程从头到尾能够完整地执行结束,它解决了多线程资源竞争下的原子操作问题。 锁的坏处:阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了 锁的致命问题:死锁...原创 2020-07-29 00:36:06 · 1261 阅读 · 0 评论