1. 最小的能独立运行的基本单位是什么
线程是进程的一个实体,是CPU调度和分配的基本单位,它是比进程更小的能独立运行的基本单位,一个进程可以包含多个线程
2. 线程与进程的区别是什么
地址空间和其他资源:进程间相互独立,同一进程的各线程相互之间共享,某进程内的线程在其他进程不可见;
通信:进程间通信IPC,线程间可以直接读写进程数据段来进行通信。
调度和切换:线程上下文切换比进程上下文切换要快得多
在多线程OS中,进程不是一个可执行的实体
3. 如何解决线程的死锁
死锁就是当一个或多个进程都在等待系统资源,而资源本身又被占用时,所产生的一种状态;
死锁的产生是必须要满足一些特定条件的:互斥条件;请求和保持条件;不剥夺条件;循环等待条件
要预防和避免死锁的发生,只需将上面的4个条件破坏掉其中之一即可。
4. 线程有哪些分类
线程可分为脱离线程和非脱离线程。用户级线程和内核级线程。守护线程和用户线程
5. 多线程异步有什么问题
线程的适用范围是那种需要长时间CPU运算的场合。由于使用线程编程的简单和符合习惯,所以很多朋友往往会使用线程来执行耗时较长的I/O操作。在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作是就不合适了
6. 实现线程同步的方法有哪些
使用C++标准库的thread,mutex头文件
使用windows API的临界区对象
使用windows API的事件对象
7. pthread_exit和exit的区别什么
当初始线程从main()调用返回时或调用exit()时,整个进程及其所有的线程都将中止。在其他线程调用exit()也会中止整个进程
如果主线程仅仅调用了pthread_exit,则仅主线程本身中止,进程及进程内的其他线程将继续存在。所有线程都已中止时,进程也将中止
8. 线程的继承性是什么
子线程继承主线程的属性。进程中的所有信息对该进程的所有线程都是共享的:可执行的程序文本,程序的全局内存,堆内存,栈,文件描述符;信号的处理是进程中所有线程共享的。(如果信号的默认处理是中止该进程,那么即使把信号传给某个线程也一样会将进程杀掉)
9. 多进程与多线程的优劣
多线程比多进程成本低,但性能更低
多线程优点:无需跨进程边界;程序逻辑和控制方式简单;所有线程可以直接共享内存和变量等。缺点:每个线程与主程序共用地址空间,受制于GB地址空间,线程之间的同步与加锁控制比较麻烦;一个线程的崩溃可能影响整个程序的稳定性;到达一定的线程数程度后,即便再增加CPU也无法提高性能
多进程优点:每个进程独立,不影响主程序的稳定性;通过增加CPU,就可以扩充性能;可以尽量减少线程加锁/解锁的影响,极大提高性能。缺点:逻辑控制复杂,需要和主程序交互;需要跨进程边界;调度开销比较大
10. 多线程开发的有哪些应用
多线程应用很广泛:
1. 不阻断主线程,实现即时响应,由后台线程完成特定操作
2. 多个线程完成同类任务,提高并发性能
3. 一个任务有多个独立的步骤,多个线程并发执行各子任务,提高任务处理效率