十分钟理解Actor模式 您所在的位置:网站首页 编程的设计模式是什么意思 十分钟理解Actor模式

十分钟理解Actor模式

2024-06-16 21:27| 来源: 网络整理| 查看: 265

Actor模式是一种并发模型,与另一种模型共享内存完全相反,Actor模型share nothing。所有的线程(或进程)通过消息传递的方式进行合作,这些线程(或进程)称为Actor。共享内存更适合单机多核的并发编程,而且共享带来的问题很多,编程也困难。随着多核时代和分布式系统的到来,共享模型已经不太适合并发编程,因此几十年前就已经出现的Actor模型又重新受到了人们的重视。MapReduce就是一种典型的Actor模式,而在语言级对Actor支持的编程语言Erlang又重新火了起来,Scala也提供了Actor,但是并不是在语言层面支持,Java也有第三方的Actor包,Go语言channel机制也是一种类Actor模型。

 

单线程编程

单核单机时代一般都是单线程编程,如果把程序比作一个工厂,那么只有一个工人,这个工人负责所有的事情,所有的原料,工具产品等都放到一个地方,因为只有一个人,因此使用一套工具就行,取原料也不用排队等。wKioL1WOK1TARuclAADkQl8bN5U550.jpg

 

多线程编程-共享内存

到了多核时代,有多个工人,这些工人共同使用一个仓库和车间,干什么都要排队。比如我要从一块钢料切出一块来用,我得等别人先用完。有个扳手,另一个人在用,我得等他用完。两个人都要用一个切割机从一块钢材切一块钢铁下来用,但是一个人拿到了钢材,一个人拿到了切割机,他们互相都不退让,结果谁都干不了活。

wKiom1WOKpHgGDoXAAFY8MuvOgA842.jpg

假如现在有一个任务,找100000以内的素数的个数,最多使用是个线程,如果用共享内存的方法,可以用下面的代码实现。可以看到,这些线程共享了currentNum和totalPrimeCount,对它们做操作时必须上锁。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 public class PrimeCount implements Runnable {          private int currentNum = 2;  //从2开始找     private int totalPrimeCount = 0; //当前已经找到的           //取一个数,不能重复,最大到100000     private int incrCurrentNum() {          synchronized (this) {     //如果不用锁,必然会出错。             if(currentNum > 100000) {                 return -1;             } else {                 int result = currentNum;                 currentNum++;                 return result;             }           }     }          //把某个线程找到的素数个数加上     private void accPrimeCount(int count) {          synchronized (this) {             totalPrimeCount += count;         }     }           @Override      //一直取数并判断是否为素数,取不到了就把找到的个数累加     public void run() {          int primeCount = 0;         int num;         while((num=incrCurrentNum()) != -1) {             if(isPrime(num)) {                 primeCount++;             }         }         accPrimeCount(primeCount);     }     private boolean isPrime(int num) {         for(int i = 2; i 


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有