线程抢占的原因? 僵尸线程产生原因?
一、线程抢占的原因?
首先要了解使用多线程的原因,以 杀毒软件 为例。
使用单线程,想要执行 病毒查杀 和 清理垃圾,那么只能先执行 病毒查杀和 清理垃圾 的其中一个,再执行另外一个。
使用多线程,可以 同时执行 清理垃圾 和 病毒查杀。但是问题随之而来,下边将解析多线程的安全问题。抢占式执行(线程安全根本原因),首先明确线程是 抢占式执行 的,也就是说,CPU 调度线程的时间是不确定的。还是以 病毒查杀 为例,可能 病毒查杀 这个线程执行到一半,就被调度出 CPU,然后执行 清理垃圾。
二、僵尸线程产生原因?
僵尸进程的产生:
当一个进程创建了一个子进程时,他们的运行时异步的。即父进程无法预知子进程会在什么时候结束,那么如果父进程很繁忙来不及wait 子进程时,那么当子进程结束时,会不会丢失子进程的结束时的状态信息呢?处于这种考虑unix提供了一种机制可以保证只要父进程想知道子进程结束时的信息,它就可以得到。
这种机制是:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存。但是仍然保留了一些信息(如进程号pid 退出状态 运行时间等)。这些保留的信息直到进程通过调用wait/waitpid时才会释放。这样就导致了一个问题,如果没有调用wait/waitpid的话,那么保留的信息就不会释放。比如进程号就会被一直占用了。但系统所能使用的进程号的有限的,如果产生大量的僵尸进程,将导致系统没有可用的进程号而导致系统不能创建进程。所以我们应该避免僵尸进程
这里有一个需要注意的地方。如果子进程先结束而父进程后结束,即子进程结束后,父进程还在继续运行但是并未调用wait/waitpid那子进程就会成为僵尸进程。
但如果子进程后结束,即父进程先结束了,但没有调用wait/waitpid来等待子进程的结束,此时子进程还在运行,父进程已经结束。那么并不会产生僵尸进程。应为每个进程结束时,系统都会扫描当前系统中运行的所有进程,看看有没有哪个进程时刚刚结束的这个进程的子进程,如果有,就有init来接管它,成为它的父进程。
同样的在产生僵尸进程的那种情况下,即子进程结束了但父进程还在继续运行(并未调用wait/waitpid)这段期间,假如父进程异常终止了,那么该子进程就会自动被init接管。那么它就不再是僵尸进程了。应为intit会发现并释放它所占有的资源。(当然如果进程表越大,init发现它接管僵尸进程这个过程就会变得越慢,所以在init为发现他们之前,僵尸进程依旧消耗着系统的资源)
三、简述线程中断的原因?
原因可能有:
①JVM将CPU资源从当前线程切换给其他线程,使本线程让出CPU的使用权处于中断状态;
②线程使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态;
③线程使用CPU资源期间,执行了wait()方法,使得当前线程进入等待状态;
④线程使用CPU资源期间,执行某个操作进入阻塞状态,比如执行读/写操作引起阻塞。
四、dubbo线程池原理及源码?
DUBBO提供五种线程模型
all 所有消息都派发到业务线程池,包括请求,响应,连接事件,断开事件,心跳
direct 所有消息都不派发到业务线程池,全部在IO线程直接执行
message 只有请求响应消息派发到业务线程池,其它连接断开事件,心跳等消息直接在IO线程执行
execution 只有请求消息派发到业务线程池,响应和其它连接断开事件,心跳等消息直接在IO线程执行
connection 在IO线程上将连接断开事件放入队列,有序逐个执行,其它消息派发到业务线程池
五、宿舍财物安全问题及回答?
宿舍财务安全还是需要自己上点心。最好贵重物品不要随便乱放,自己的东西要有收拾,心里要有数。不要自己随便乱放找不到东西,会让有心之人有机可乘。
贵重物品需要收拾好锁在柜子里。财不露白,钱财最好存在银行里面。银行密码要保管好,自己的身份证要保管好。
六、java什么是线程池及为什么要使用线程池?
创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从JDK1.5开始,Java API提供了Executor框架让你可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池)。
七、linux线程被挂起的原因?
Linux线程被挂起的原因有以下几种:
1. 等待I/O操作完成:当线程执行I/O操作时,如果I/O操作需要一定的时间才能完成,线程就会被挂起等待I/O操作完成。
2. 等待锁:当线程需要获取一个被其他线程持有的锁时,它就会被挂起等待锁的释放。
3. 调用sleep函数:当线程调用sleep函数时,它就会被挂起一段时间,等待指定的时间到达后再继续执行。
4. 调用wait函数:当线程调用wait函数等待子进程结束时,它就会被挂起等待子进程结束。
5. 调用pthread_join函数:当线程调用pthread_join函数等待其他线程结束时,它就会被挂起等待其他线程结束。
6. 调用信号处理函数:当线程接收到信号并调用信号处理函数时,它就会被挂起等待信号处理函数执行完毕。
7. 调用系统调用:当线程调用系统调用时,它就会被挂起等待系统调用完成。
八、线程退出的原因有哪些?
1.最自然的方式,线程工作完毕,退出。2.线程在工作出现了问题,要将自身退出。3.外部线程管理此线程,在不再需要此线程执行的情况下,将其退出。
线程退出的方法:1.使用全局变量或是线程封装类成员变量表示线程工作状态。2.设置全局的事件或线程封装类事件成员变量表示线程工作状态,在pthread类库中有专门的事件处理函数。3.向线程发送事件的方式(只有Windows提供)4.使用强制退出的方法,也就是TerminateThread。
九、摩尔线程纳入实体清单原因?
摩尔线程被纳入实体清单的原因是因为它是一种新型的纳米级线程材料,具有良好的导电性能和机械性能,可用于制造高性能电子器件和传感器。
其具有优异的导电性和柔韧性,能够在微观尺度下进行精密操作,因此在纳米技术领域具有广泛的应用前景。同时,摩尔线程的研究和开发也符合国家对新材料研发的战略规划,因此被纳入实体清单以推动其产业化和应用。
十、舞蹈安全问题及注意事项?
舞蹈是一项高强度的运动,需要注意以下安全问题和注意事项:
1. 热身:在进行舞蹈前,一定要进行充分的热身,包括拉伸、跑步等,以减少受伤的风险。
2. 穿着:穿着合适的运动鞋和服装,以保护脚部和身体。
3. 场地:选择平整、干燥、无障碍物的场地进行舞蹈,以减少跌倒和碰撞的风险。
4. 技巧:学习正确的舞蹈技巧和动作,以减少受伤的风险。
5. 负重训练:对于需要进行负重训练的舞蹈,一定要逐渐增加负重,以避免肌肉拉伤和韧带损伤。
6. 水分:在舞蹈过程中,要及时补充水分,以避免脱水和中暑。
7. 休息:在舞蹈过程中,要适当休息,以避免疲劳和受伤。
8. 紧急情况:在紧急情况下,要及时停止舞蹈,寻求帮助或进行急救。
总的来说,舞蹈是一项高强度的运动,需要注意安全问题和注意事项,以保护自己的身体健康。