这是我参与「第五届青训营 」笔记创作活动的第8天
线程池隔离和信号量隔离的区别
- 什么情况下用线程池隔离:
请求并发量大,并且耗时长,比如一些大计算量或者是对数据库进行操作:采用线程隔离策略,这样可以保证大量的容器(tomcat)线程可用,不会由于服务原因,一直处于阻塞或者等待状态,快速失败返回。
- 什么情况下用信号量隔离:
请求并发量大,并且耗时短,比如一些小计算量或者是对缓存进行操作:采用信号量隔离策略,因为这类服务的返回通常非常快,不会占用容器线程太长时间,并且还能减少一些线程切换上下文的开销,进而提高缓存服务的效率
信号量和互斥锁的异同
-
互斥量用于线程的互斥,信号线用于线程的同步。 这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
-
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
-
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源
-
举例: 互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。 基于上面的特点,互斥锁一般用于控制一段临界代码,当然信号量也可以故到。但是如果释放和获取不在一个函数中甚至不在一个线程中时就必须使用信号量了。