一、进程和线程的区别?
进程是资源分配的最小单位,线程是CPU调度的最小单位
进程有自己的独立地址空间,线程共享地址空间(共享相同的堆空间,可以访问和修改相同的动态内存分配区域,而栈是线程私有的,每个线程都有自己的栈空间,用于保存局部变量和函数调用信息。)
多进程程序更健壮,一个进程不会对其他进程造成影响
线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据
进程上下文切换开销大,线程开销小
二、产生死锁的条件以及如何避免?
死锁是指两个或多个进程在执行过程中,因争夺资源而造成的一种互相等待的现象,导致它们都无法继续执行。(假设有两个线程A和B,它们都需要获取两个资源,资源1和资源2。如果线程A先获取了资源1,然后尝试获取资源2,同时线程B先获取了资源2,然后尝试获取资源1,那么就可能会发生死锁。这是因为线程A持有了资源1并等待资源2,而线程B持有了资源2并等待资源1,两个线程互相等待对方释放资源,从而导致了死锁。)
四大必要条件:
- 资源互斥,不可共享:每个资源每次只能被一个进程占用
- 占有和等待条件:进程在持有某些资源的同时,又请求其他资源。假设进程A已经占有了R1,并在执