Memory
Swoole提供了6个内存操作的模块,在多进程编程中可以帮助程序员实现一些特殊的需求。
- Memory下的模块可以安全的用于异步非阻塞程序中,不存在任何IO消耗
- 所有模块均为多进程安全的,无需担心数据同步问题
- Memory相关模块对象为有限资源,不可大量创建
Lock示例:
$lock = new swoole_lock(SWOOLE_MUTEX); echo "[Master]create lock\n"; $lock->lock(); if(pcntl_fork() > 0) { sleep(1); $lock->unlock(); } else { echo "[Child] Wait Lock\n"; $lock->lock(); echo "[Child] Get Lock\n"; $lock->unlock(); exit("[Child] exit\n"); } echo "[Master]release lock\n"; unset($lock); sleep(1); echo "[Master]exit\n";
Buffer示例:
$buffer = new swoole_buffer; $buffer->append(str_repeat("A", 10)); $buffer->append(str_repeat("B", 20)); $buffer->append(str_repeat("C", 30)); var_dump($buffer); echo $buffer->substr(0, 10, true)."\n"; echo $buffer->substr(0, 20, true)."\n"; echo $buffer->substr(0, 30)."\n"; $buffer->clear(); echo $buffer->substr(0, 10, true)."\n"; var_dump($buffer); sleep(1);
Table示例:
$table = new swoole_table(1024); $table->column('name', swoole_table::TYPE_STRING, 64); $table->column('id', swoole_table::TYPE_INT, 4); //1,2,4,8 $table->column('num', swoole_table::TYPE_FLOAT); $table->create(); $table->set('swoole@qq.com', array('id' => 145, 'name' => 'swoole1', 'num' => 3.1415)); $table->set('123456@qq.com', array('id' => 358, 'name' => "swoole2", 'num' => 3.1415)); $table->set('hello@qq.com', array('id' => 189, 'name' => 'swoole3', 'num' => 3.1415)); foreach($table as $value) { var_dump($value); } echo "======================= Total Elements: {$table->count()} ============================\n"; $table->del('123456@qq.com'); // delete a exist element foreach($table as $value) { var_dump($value); } echo "======================= Total Elements: {$table->count()} ============================\n"; $ret = $table->del('a invalid key'); // delete a invalid element var_dump($ret); foreach($table as $value) { var_dump($value); } echo "======================= Total Elements: {$table->count()} ============================\n";