1. 背景1.1. 惊人的性能数据最近一个圈内朋友告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。事实上,我对这个数据并不感到...
分类:
Web程序 时间:
2015-02-08 01:37:04
阅读次数:
396
最近看网络编程方面的书,看到后面突然发现,同步异步,阻塞非阻塞似乎是同一个概念,其实不然老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去...
分类:
其他好文 时间:
2015-02-04 01:58:36
阅读次数:
122
异步非阻塞套接字避免了死循环的接收问题,但是软件用起来体验还是很差。究其原因,软件在指令的发送、接收上,采取了一种不合理的方式:在指令的发送后,立刻调用接收函数,等待回令。 若是采用同步阻塞套接字,那么如果连接出现问题没有回令,那么软件进程会始终等待锁死,这样显然是不合理。于是采用同步非阻塞的...
分类:
编程语言 时间:
2015-01-22 17:32:35
阅读次数:
212
NIO(同步非阻塞IO)是jdk1.4之后推出的newio,它跟BIO(同步阻塞IO)有着非常明显的区别。BIO在调用read/write的时候会阻塞线程,也就是就算某个时刻你的socket并没有数据需要传输,但是你的socket线程却仍然会被阻塞在read/write方法上,所以BIO是一个soc...
分类:
编程语言 时间:
2015-01-18 18:27:25
阅读次数:
265
最近大概看了ZooKeeper和Mina的源码发现都是用Java NIO实现的,所以有必要搞清楚什么是NIO。
BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都...
分类:
其他好文 时间:
2015-01-11 23:02:52
阅读次数:
516
1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。(阻塞)2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。(立即返回)3. 异步事件阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是...
分类:
其他好文 时间:
2014-12-03 22:52:31
阅读次数:
146
原文老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的...
分类:
其他好文 时间:
2014-11-24 22:06:11
阅读次数:
182
1、同步网络模型:就是服务端同步阻塞等待客户端的请求,然后继续操作后续处理,缺点是性能低。2、同步通讯+多线程模型:服务端为每个客户端分配线程,这个线程就负责这个客户端,同步通讯,同步处理这个客户端的请求, 缺点就是当客户端很多时,线程很多,CPU在却换线程的上下文时会消耗很多资源,最终会导致CPU...
分类:
其他好文 时间:
2014-11-16 11:56:14
阅读次数:
136
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。(2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的N...
分类:
其他好文 时间:
2014-11-15 00:11:49
阅读次数:
301
直接上代码服务端代码(server.php)<?php
/*
swooleTask运行实例
Task简介
Swoole的业务逻辑部分是同步阻塞运行的,如果遇到一些耗时较大的操作,例如访问数据库、广播消息等,就会影响服务器的响应速度。因此Swoole提供了Task功能,将这些耗时操作放到另外的进程去处理,当..
分类:
其他好文 时间:
2014-11-10 15:51:23
阅读次数:
207