linux系统 建网站,吉林省住房建设厅网站,王者荣耀网页制作素材,网站建设建议书平时开发中经常会听大家说到什么同步阻塞、异步非阻塞等等名词#xff0c;这里我谈下自己对这两个名词的理解#xff0c;仅仅是个人观点#xff0c;并不一定正确。 
1.阻塞/非阻塞 
我认为判定阻塞还是非阻塞#xff0c;取决于线程所做的操作是否需要将线程挂起等待。 举个…平时开发中经常会听大家说到什么同步阻塞、异步非阻塞等等名词这里我谈下自己对这两个名词的理解仅仅是个人观点并不一定正确。 
1.阻塞/非阻塞 
我认为判定阻塞还是非阻塞取决于线程所做的操作是否需要将线程挂起等待。 举个例子我们都知道CAS是非阻塞的而synchronized是阻塞的。为什么呢因为CAS能快速返回一个获取锁成功或失败结果线程可以在获取锁失败时再去做其他事情而synchronized在线程获取锁失败后会将线程挂起直到锁释放后才可能被重新唤醒这期间线程一直处于blocked的等待状态。 
1.同步/非同步 
我认为同步还是非同步取决于是否是当前线程亲自执行操作。若当前线程亲自执行操作则为同步当前线程通过创建或利用其他线程执行操作则为异步。 同样举个例子我们都知道Nio和Aio一个为同步非阻塞一个为异步非阻塞。在Nio中所有的业务线程会将关注的读写事件和回调接口注册到事件中心通过事件管理线程不停的循环检测是否有就绪的事件如果有事件管理器就会调用回调接口业务线程就会去进行相应的读写操作和业务逻辑。而区别于Nio在Aio中业务线程会直接向操作系统提出一个异步IO的请求然后将回调函数和相关信息注册到事件中心操作系统会异步的进行相应IO读写操作并将结果写到指定内存地址操作完成后由事件管理器调用业务线程的回调接口业务线程直接使用内存数据。两者之前的区别在于是否为业务线程亲自进行读写操作。