1. 進程與線程的關係?
線程是進程內部的一個控制序列;
進程內可以有多個線程/控制序列,但是進程啓動的第一個控制序列,被稱爲主線程;
進程是資源分配的單位;線程是調度單位;
2. 使用多線程的優點?
多線程間通信:多個線程共享進程的存儲地址空間和文件描述符;
改善吞吐量;
3. 使用多線程的缺點:
同步處理;(比如不同的線程可以訪問同一全局變量)
多線程調試;
4. 多線程與多進程相比較?
context switch:進程與進程之間切換時,上下文切換(context swith)需要時間較長;
通信:進程間通信相比多線程,比較困難和耗時;
數據共享,同步:
多進程:數據共享困難,需要使用IPC;數據是分離的,同步簡單;
多線程:因共享進程數據,故共享數據簡單,但同步困難;
可靠性:
多進程間互不影響;
多線程間:若其一線程崩潰,則進程崩潰
內存,cpu:多進程佔用內存多,cpu利用率低;
分佈式:
多進程:適合多機,多核分佈式;若一臺機器不夠,可以方便的擴展到多臺機器;
多線程:適合多核分佈式
5. 線程的結構
一個進程中可以包括多個線程,多個線程也可以同時執行進程空間的代碼;故線程擁有自己的線程控制塊:
線程id & 一組寄存器值 & 棧 & 調度優先級 & 策略 & 信號屏蔽字 & errno變量 & 線程私有數據;
進程的所有信息(可執行的程序文本,全局內存和堆內存,堆棧,和文件描述符)對該進程的所有線程都是共享的。