import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class FlowConcurrentController { // 每秒并发访问控制数量 final static int MAX_QPS = 10; // 并发控制信号量 final static Semaphore semaphore = new Semaphore(MAX_QPS); // 监控每秒并发访问次数(理论上accessCount.get() <= 10) final static AtomicInteger accessCount = new AtomicInteger(0); // 模拟远程访问 private static void remoteCall(int i, int j) { System.out.println(String.format("%s - %s: %d %d", new Date(), Thread.currentThread(), i, j)); } private static void releaseWork() { // 每秒release一次 // release semaphore thread Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() { @Override public void run() { semaphore.release(accessCount.get()); accessCount.set(0); } }, 1000, 1000, TimeUnit.MILLISECONDS); } // 模拟并发访问控制 private static void simulateAccess(final int m, final int n) throws Exception { // m : 线程数;n : 调用数 ExecutorService pool = Executors.newFixedThreadPool(100); for (int i = m; i > 0; i--) { final int x = i; pool.submit(new Runnable() { @Override public void run() { for (int j = n; j > 0; j--) { try { Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } semaphore.acquireUninterruptibly(1); accessCount.incrementAndGet(); remoteCall(x, j); } } }); } pool.shutdown(); pool.awaitTermination(1, TimeUnit.HOURS); } public static void main(String[] args) throws Exception { // 开启releaseWork releaseWork(); // 开始模拟lots of concurrent calls: 100 * 1000 simulateAccess(100, 1000); } }
http://blog.csdn.net/mn11201117/article/details/8809511
相关推荐
3. 并发量大:基于OpenResty的长连接推送系统需要解决高并发问题。通过使用worker级别的流控、ngx.semaphore和共享内存队列等技术,可以实现高效的并发处理。 4. 实施过程与优化:基于OpenResty的长连接推送系统的...
UDP(User Datagram Protocol)是互联网协议族中的一种无连接、不可靠的传输协议,与TCP相比,它更轻量级,适用于对实时性要求高但对数据完整性要求不那么严格的应用场景,如在线视频、语音通话等。在进行UDP网络...
热点参数限流是 Sentinel 的一种特殊的流控规则,主要是对热点参数的访问频次进行限制,以避免热点参数的访问频次超出系统的承载能力。热点参数限流规则可以根据参数的名称、参数的类型、参数的访问频次等来定义。 ...
Sentinel 是一种轻量级的流量控制、熔断降级组件,专门为分布式系统设计,目标是保证微服务的高可用性和防止雪崩。下面是 Sentinel 的一些重要知识点: 1. 微服务调用存在问题:微服务之间的调用可能会导致级联...
- REST规范:定义了一组互联网应用的架构约束,实现轻量级、无状态的交互。 六、CAP三进二和BASE定理 - CAP定理:一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)三者不可兼得,只能...
SpringBoot是基于Spring框架的轻量级开发工具,简化了创建独立的、生产级别的基于Spring的应用程序过程。在这个项目中,SpringBoot作为后端服务的基础,提供了RESTful API接口,用于处理WebSocket连接和处理FFmpeg的...
Chronicle库提供了一种轻量级的消息传递机制,它使用了创新的数据结构和算法,使得在Java堆内存中的数据操作达到近乎原生速度。它的核心组件包括: 1. **Chronicle Queue**:一个持久化的、顺序的、低延迟的消息...
Erlang是一种面向并发的、基于actor模型的编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、容错性和可扩展性的分布式系统。在这个“Erlang的HTTP2服务器。男孩,那家伙是个真正的话痨”项目中,...
Sentinel是一款轻量级的流控(流量控制)组件,主要应用于分布式服务架构中,用于实现微服务的流量控制、熔断降级、系统负载保护等功能。流控是Sentinel三大核心能力之一,下面将详细介绍Sentinel使用的几种常见限流...
- **并发控制**:grpc-go 提供了并发控制机制,如流控和负载均衡,确保在高并发场景下的稳定性。 - **健康检查**:内置健康检查接口,服务端可以报告其运行状态,客户端可以根据此信息决定是否发送请求。 - **...
微服务架构是一种将单一应用程序分解为一组小型服务的方法,每个服务运行在其自己的进程中,服务之间通过轻量级通信机制(通常是 HTTP RESTful API)进行交互。这种架构使得服务能够独立部署、扩展和升级,提高了...
微服务架构是一种将单一应用程序开发为一组小服务的方法,每个服务运行在其独立的进程中,并使用轻量级机制(通常是HTTP资源API)进行通信。这种架构风格允许服务独立地部署、扩展和维护。以下是关于微服务架构发展...
相反,无连接的服务,如UDP,轻量级且快速,但需要应用程序自行处理可靠性问题。 选择TCP还是UDP取决于应用需求。例如,HTTP、HTTPS等需要稳定性的协议常使用TCP,而DNS、多媒体流等对实时性要求高的场景可能选择...
而Ocelot则是一款基于.NET Core开发的企业级API网关,它具有轻量级、高性能和易于配置的特点。 在分享中,张善友介绍了如何基于Ocelot开发企业级API网关。他首先对企业级API网关进行了介绍,随后阐述了如何利用*** ...
1. 高效性能:SRS以其轻量级和高性能著称,能在较低配置的硬件上运行,同时保持稳定的视频流传输,确保观众可以流畅观看。 2. 实时性:通过优化的网络传输算法,SRS能实现低延迟的视频传输,为观众带来近乎实时的...
2. **TCP协议**:TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。在Unix网络编程中,使用TCP需要经过三次握手建立连接,然后才能进行数据传输。TCP通过确认机制、重传和流控保证数据的正确性。`socket(AF_...
- **客户端实现**:如何编写一个简单的TCP或UDP客户端程序。 《UNIX网络编程 卷一》中文第二版不仅涵盖了以上知识点,还包括实际的示例代码,帮助读者理解并应用这些理论。通过学习本书,读者能够掌握UNIX环境下的...
与TCP(Transmission Control Protocol)相比,UDP提供了更轻量级的服务,不提供顺序保证、错误检测或流控,因此在某些需要快速传输但对数据完整性要求不高的场景下,UDP更具优势。 在这个"udp网络通讯协议demo"中...
Hystrix是Netflix开源的,而Sentinel是阿里巴巴开源的,两者都能防止服务雪崩,通过熔断机制保护系统在高并发或者服务异常时的稳定性。Sentinel提供了丰富的流量控制策略,如流控、降级、热点防护等,更适合现代...
Elixir是一种基于Erlang虚拟机(BEAM)的函数式编程语言,其设计目标是构建高可用、容错性强和并发性能优秀的系统。Elixir的并发模型主要依赖于进程(Processes),它们是轻量级的、独立执行的实体,可以安全地并行...