rango.swoole.com
韩天峰(Rango)的博客 » 关于C10K、异步回调、协程、同步阻塞
http://rango.swoole.com/archives/381
比如调用 client- recv() 等待接收数据时,就像阻塞代码一样写。 提供, 通过 XHTML 1.1.
rango.swoole.com
韩天峰(Rango)的博客 » C/C++
http://rango.swoole.com/archives/category/cc
8216;C/C ’ 分类的存档. C 有各种数据结构,C 可以开线程,C 可以共享对象。 PHP比C/C 或Java少了什么 多线程,多线程,多线程……. 我的编程之路轨迹就是 C语言 起始 - Java 过客 - PHP 主 - C语言 终点。 真正的异步IO 下面会统一叫做AIO 应该像Windows IOCP一样,传入文件句柄,缓存区,尺寸等参数和一个函数指针,当操作系统真正完成了IO操作,再执行对应的函数。 头文件为 aio.h ,支持FreeBSD/Linux。 主要的几个函数是aio read/aio write/aio return。 由操作系统内核提供的AIO,头文件为 linux/aio abi.h。 主要的几个系统调用为io submit/io setup/io getevents。 Public class Test { private int xxx; public static void main(String[] args) { xxx = 12345; } }. 命令行下执行 ulimit -n 100000即可修改。 If (a b) { return false; }.
rango.swoole.com
韩天峰(Rango)的博客 » swoole新增的tick定时器
http://rango.swoole.com/archives/433
Swoole timer tick(1000, function ($timer id) { echo "tick-1000ms n"; swoole timer clear($timer id); }) swoole timer tick(2000, function () { echo "tick-2000ms n"; }). Swoole timer tick和swoole timer after原理是相同的,区别是after只执行一次就会销毁。 提供, 通过 XHTML 1.1.
rango.swoole.com
韩天峰(Rango)的博客 » 进程间通信
http://rango.swoole.com/archives/category/php_system_program/进程间通信
8216;进程间通信’ 分类的存档. Declare(ticks = 1); pcntl signal(SIGINT, 'signalHandler');. 这段代码在执行pcntl signal前,先加入了declare(ticks = 1)。 PHP MINIT FUNCTION(pcntl) { php register signal constants(INIT FUNC ARGS PASSTHRU); php pcntl register errno constants(INIT FUNC ARGS PASSTHRU); php add tick function(pcntl signal dispatch TSRMLS CC); return SUCCESS; }. Pcntl signal dispatch 函数的实现. 那么PHP的pcntl signal,就带来了额外的 1000 * 1000,也就是100万次空的函数调用。 Nohup php myprog.php log.txt &. 提供, 通过 XHTML 1.1.
rango.swoole.com
韩天峰(Rango)的博客 » Linux
http://rango.swoole.com/archives/category/linux
8216;Linux’ 分类的存档. 比如调用 client- recv() 等待接收数据时,就像阻塞代码一样写。 J = 0; for ($i = 0; $i 10000000; $i ) { $j = $i; }. Idle pool是空闲的数据库连接,当有SQL请求时从idle pool中移到busy pool中。 Wait queue); $this- doQuery($req['fd'], $req['sql']); } } } function onReceive($serv, $fd, $from id, $data) { / 没有空闲的数据库连接 if (count($this- idle pool) = 0) { / 等待队列未满 if (count($this- wait queue). 真正的异步IO 下面会统一叫做AIO 应该像Windows IOCP一样,传入文件句柄,缓存区,尺寸等参数和一个函数指针,当操作系统真正完成了IO操作,再执行对应的函数。 头文件为 aio.h ,支持FreeBSD/Linux。 提供, 通过 XHTML 1.1.
rango.swoole.com
韩天峰(Rango)的博客 » PHP系统编程
http://rango.swoole.com/archives/category/php_system_program
8216;PHP系统编程’ 分类的存档. Declare(ticks = 1); pcntl signal(SIGINT, 'signalHandler');. 这段代码在执行pcntl signal前,先加入了declare(ticks = 1)。 PHP MINIT FUNCTION(pcntl) { php register signal constants(INIT FUNC ARGS PASSTHRU); php pcntl register errno constants(INIT FUNC ARGS PASSTHRU); php add tick function(pcntl signal dispatch TSRMLS CC); return SUCCESS; }. Pcntl signal dispatch 函数的实现. 那么PHP的pcntl signal,就带来了额外的 1000 * 1000,也就是100万次空的函数调用。 Dead loop.php $array = array(); for($i = 0; $i. 解压后进入php-5.4.16 ext目录。 PHP ARG ...
rango.swoole.com
韩天峰(Rango)的博客 » PHP7与Swoole
http://rango.swoole.com/archives/440
Zval *val; MAKE STD ZVAL(val);. 四 zend parse parameters改为宏实现. PHP7直接使用宏替换了zend parse parameters函数,C扩展中不再需要使用zend parse parameters进行逐个参数的查找,宏展开后自动会实现参数赋值。 很多PHP程序中会大量使用call user function, is int/string/array, strlen , defined 函数。 如基础类型int、float、bool等改为直接进行值拷贝,排序算法改进,PCRE with JIT,execute data和opline使用全局寄存器等等。 Function test(int $a, string $b, array $c) : int { / code }. Try { non exists func(); } catch (EngineException $e) { echo "Exception: {$e- getMessage()} n"; }. 提供, 通过 XHTML 1.1.
rango.swoole.com
韩天峰(Rango)的博客 » 互联网
http://rango.swoole.com/archives/category/互联网
8216;互联网’ 分类的存档. 比如调用 client- recv() 等待接收数据时,就像阻塞代码一样写。 看到这篇博文 http:/ my.oschina.net/u/140911/blog/295022 ,深感欣慰。 但swoole IO密集部分也是可以利用多核的 基于多线程的EventLoop ,Node.js不行。 而swoole用了Linux Native AIO 需要加编译参数开启 ,遇到大量并发读写文件,一样可以胜任。 提供, 通过 XHTML 1.1.
rango.swoole.com
韩天峰(Rango)的博客 » 韩 天峰
http://rango.swoole.com/archives/author/matyhtf
Function timer () { echo "hello world"; } Swoole Timer: tick(2000, 'timer');. Swoole Timer: tick(2000, function () { echo "hello world"; });. Str = "hello world"; function timer () { global $str; echo $str; } Swoole Timer: tick(2000, 'timer');. Str = "hello world"; Swoole Timer: tick(2000, function () use ($str) { echo $str; });. Locklock(); group map[group id].append([uid, score]); user map[uid].append(group id); group map.sortByScore(); lock.unlock();. Isset($groupMap[$data['gid'] ) { $groupMap[$data['...
rango.swoole.com
韩天峰(Rango)的博客 » PHP
http://rango.swoole.com/archives/category/php
8216;PHP’ 分类的存档. Function timer () { echo "hello world"; } Swoole Timer: tick(2000, 'timer');. Swoole Timer: tick(2000, function () { echo "hello world"; });. Str = "hello world"; function timer () { global $str; echo $str; } Swoole Timer: tick(2000, 'timer');. Str = "hello world"; Swoole Timer: tick(2000, function () use ($str) { echo $str; });. Locklock(); group map[group id].append([uid, score]); user map[uid].append(group id); group map.sortByScore(); lock.unlock();. Isset($groupMap[$data['gid'] ) { ...