在非常古老的日子里,曾经有一种方法可以"停止"或"杀死"线程,尽管这种方法已经被弃用,因为它允许系统不稳定.不过我注意到,有可能"取消"一个正在运行的future .这里有引号,因为我不知道如何在操作系统级别处理线程.
就我的教育而言,取消future 、有效地取消线程和停止线程之间有什么区别?为什么取消是可以的,但在过go 停止/杀死一个线程是不好的?
在非常古老的日子里,曾经有一种方法可以"停止"或"杀死"线程,尽管这种方法已经被弃用,因为它允许系统不稳定.不过我注意到,有可能"取消"一个正在运行的future .这里有引号,因为我不知道如何在操作系统级别处理线程.
就我的教育而言,取消future 、有效地取消线程和停止线程之间有什么区别?为什么取消是可以的,但在过go 停止/杀死一个线程是不好的?
取消告诉future 它的结果不再是期望的(如果它还没有完成),并让它干净地停止,而不是线程.stop()终止底层本机线程并释放其所有监视器.线程没有机会结束它正在做的事情,或者将任何东西置于已知的良好状态.
区别在于,一个发送一条消息,但让接收者按照自己的方式回复消息,而另一个只是强制地立即停止.(让接收者以自己的方式响应甚至可能意味着作业(job)将继续执行,因为Future
的不同实现可能会以不同的方式处理取消,但任何结果都将被忽略.)
这就像是在一场汽车比赛中把红旗放出来,告诉赛车在下一圈需要进入停车场,而突然在赛车前面的一条跑道中间放了一堵墙,然后撞到了车内.