xiaohanliang
OS
OS
  • hi
  • PROCESS
    • 0. 你的程序是怎么用内存的
    • 1. 为什么内存要区分堆与栈
    • 2. 什么叫你的程序
    • 3. 搞玄学?看看进程切换
    • 4. 进程是怎样调度的
    • 5. 理解进程线程有啥用
    • 6. 没有人真正见过的进程通信
    • 7. [WIP]mutex的起源CAS
    • 8. [WIP]mutex的下一步信号量
    • 9. [WIP]如何人为制造死锁
    • 10. 怎么什么东西都是fd
    • 11. IO各种模型
    • 12. Epoll内部是怎么工作的
  • NETWORK DEVICES
    • 1. 一个新的namesapce
    • 2. veth对讲机
    • 3. 如何靠网桥连接对讲机
    • 4. 左耳进右耳出的tun设备
    • 5. 如何用iptables改包头
    • 6. 在ip报头上再包个头
    • 7.如何用vxlan隧道分割局域网
    • 8. 通过多播组的方式获取mac
    • 9. 自动维护的fdb/arp表
    • 10. [WIP]macvlan网卡
Powered by GitBook
On this page

Was this helpful?

  1. PROCESS

5. 理解进程线程有啥用

[问题一: 我为什么要去了解进程线程, 对我有什么影响]

我们把多线程吹了一通, 搞得好像一个Process/多个Thread能解决所有情况一样, 其实各种进程模型都会有自己的优缺点, 搞懂了各种模型的优缺点, 你就知道你的App在你的使用场景下应该怎么选, 这其实也回答了"了解进程线程模型有什么用"这个问题. 只有正确了解进程/线程的优缺点, 等你写App的时候你就知道怎么选了

[问题二: 进程线程优缺点是什么 / 区别是什么]

  • 进程好在哪儿:

    • 多进程的好处在于如果一个进程出问题了 / 或者直接挂了, 不会影响其他进程, 直接重启它就好了. 而线程模型里, 你不能单独重启某一个线程, 而且线程卡住了其他线程全都卡住了. 为了实现隔离的效果, nginx的aster进程负责收集任务, 容易出错的干活过程交给slave进程去做

    • 资源上比如文件操作的fd, fd是按照进程去分配的, 这也就导致如果一个进程处理fd出现问题阻塞了不会影响其他进程对于这个文件的操作

  • 线程好在哪儿:

    • 上下文切换比较方便省事, 很多比如PCB之类的信息不用重新加载

    • 通信方式上不像进程一样ipc, 直接共享内存就可以搞定了, 效率

-   多进程单线程: nginx
-   单进程多线程: memcached
-   单进程单线程: redis
Previous4. 进程是怎样调度的Next6. 没有人真正见过的进程通信

Last updated 4 years ago

Was this helpful?