参考:https://blog.csdn.net/FX677588/article/details/74359823
优点:
至此,Actor模型就可以看出这种消息机制的线程调用最大好处是非阻塞的,多个线程可以同时并发进行,无需等待被调用方法执行完成返回消息的响应。当然,看到此处大家或许跟我一样有一点困惑的地方,即万一我们后面的程序需要立即使用它返回的响应消息怎么办呢?其实这也算Actor存在的一点不足之处,需要我们在设计多线程前考虑你的程序到底适不适合这种机制,后面我们会再详细描述。
缺点:
①、每个Actor虽然是独立运行的,但是一旦同时接收到多个消息,一次也仅能处理一条消息,也就是按消息队列处理;
②、Actor间异步执行,通过消息的传递实现协同。所以一个Actor内部出现执行错误很可能造成整个程序的错误——比如一个或多个其他Actors可能一直等待它反馈的消息。所以我们一定需要好好的处理Actors的例外事件,并且有容错机制及时反馈错误信息给其他等待中的Actors;
③、Actor模型也存在死锁问题,也有可能遇到它们之间互相等待消息,所以可以使用超时设定的功能打破这个死锁情况;
④、从上面的阐述我们也能窥探一二,并不是所有的应用开发都很好适合Actor模型。当且仅当我们可以将问题分为多个小模块,并且它们各自是独立运行的,仅个别地方需要交流。如果多线程间需要频繁互动,存在交叉的环境,其实Actor模型的效率优势也就不复存在了,也就失去了其消息调用并行执行的必要性。