日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

PHP中使用協(xié)同程序?qū)崿F(xiàn)合作多任務(wù)(3)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:php修改NetBeans默認(rèn)字體的大小
在Netbeans中由于使用了Swing進(jìn)行開發(fā),所以其中界面的字體也是由Java虛擬機(jī)進(jìn)行配置而不是隨操作系統(tǒng)的。在安裝完Netbeans后默認(rèn)的字體大小是11px。而在Windows下的宋體最小支持12px。所以字體為11px就已經(jīng)無法完整顯示了。 簡單的解決辦法就是將字體改大一點。詳細(xì)的

    public function run() {
        while (!$this->taskQueue->isEmpty()) {
            $task = $this->taskQueue->dequeue();
            $task->run();

            if ($task->isFinished()) {
                unset($this->taskMap[$task->getTaskId()]);
            } else {
                $this->schedule($task);
            }
        }
    }
}

 newTask()方法(使用下一個空閑的任務(wù)id)創(chuàng)建一個新任務(wù),然后把這個任務(wù)放入任務(wù)映射數(shù)組里。接著它通過把任務(wù)放入任務(wù)隊列里來實現(xiàn) 對任務(wù)的調(diào)度。接著run()方法掃描任務(wù)隊列,運行任務(wù)。如果一個任務(wù)結(jié)束了,那么它將從隊列里刪除,否則它將在隊列的末尾再次被調(diào)度。
 讓我們看看下面具有兩個簡單(并且沒有什么意義)任務(wù)的調(diào)度器: 

復(fù)制代碼 代碼如下:
<?php

function task1() {
    for ($i = 1; $i <= 10; ++$i) {
        echo "This is task 1 iteration $i.\n";
        yield;
    }
}

function task2() {
    for ($i = 1; $i <= 5; ++$i) {
        echo "This is task 2 iteration $i.\n";
        yield;
    }
}

$scheduler = new Scheduler;

$scheduler->newTask(task1());
$scheduler->newTask(task2());

$scheduler->run();

 兩個任務(wù)都僅僅回顯一條信息,然后使用yield把控制回傳給調(diào)度器。輸出結(jié)果如下:

 

復(fù)制代碼 代碼如下:
 This is task 1 iteration 1.
This is task 2 iteration 1.
This is task 1 iteration 2.
This is task 2 iteration 2.
This is task 1 iteration 3.
This is task 2 iteration 3.
This is task 1 iteration 4.
This is task 2 iteration 4.
This is task 1 iteration 5.
This is task 2 iteration 5.
This is task 1 iteration 6.
This is task 1 iteration 7.
This is task 1 iteration 8.
This is task 1 iteration 9.
This is task 1 iteration 10.
 

輸出確實如我們所期望的:對前五個迭代來說,兩個任務(wù)是交替運行的,接著第二個任務(wù)結(jié)束后,只有第一個任務(wù)繼續(xù)運行。  

與調(diào)度器之間通信

既然調(diào)度器已經(jīng)運行了,那么我們就轉(zhuǎn)向日程表的下一項:任務(wù)和調(diào)度器之間的通信。我們將使用進(jìn)程用來和操作系統(tǒng)會話的同樣的方式來通信:系統(tǒng)調(diào)用。 我們需要系統(tǒng)調(diào)用的理由是操作系統(tǒng)與進(jìn)程相比它處在不同的權(quán)限級別上。因此為了執(zhí)行特權(quán)級別的操作(如殺死另一個進(jìn)程),就不得不以某種方式把控制傳回給 內(nèi)核,這樣內(nèi)核就可以執(zhí)行所說的操作了。再說一遍,這種行為在內(nèi)部是通過使用中斷指令來實現(xiàn)的。過去使用的是通用的int指令,如今使用的是更特殊并且更 快速的syscall/sysenter指令。

我們的任務(wù)調(diào)度系統(tǒng)將反映這種設(shè)計:不是簡單地把調(diào)度器傳遞給任務(wù)(這樣久允許它做它想做的任何事),我們將通過給yield表達(dá)式傳遞信息來與系統(tǒng)調(diào)用通信。這兒yield即是中斷,也是傳遞信息給調(diào)度器(和從調(diào)度器傳遞出信息)的方法。 

為了說明系統(tǒng)調(diào)用,我將對可調(diào)用的系統(tǒng)調(diào)用做一個小小的封裝:
 

復(fù)制代碼 代碼如下:
<?php

class SystemCall {
    protected $callback;

    public function __construct(callable $callback) {
        $this->callback = $callback;
    }

    public function __invoke(Task $task, Scheduler $scheduler) {
        $callback = $this->callback; // Can't call it directly in PHP :/
        return $callback($task, $scheduler);
    }
}

它將像其他任何可調(diào)用那樣(使用_invoke)運行,不過它要求調(diào)度器把正在調(diào)用的任務(wù)和自身傳遞給這個函數(shù)。為了解決這個問題 我們不得不微微的修改調(diào)度器的run方法:

復(fù)制代碼 代碼如下:
<?php
public function run() {
    while (!$this->taskQueue->isEmpty()) {
        $task = $this->taskQueue->dequeue();
        $retval = $task->run();

分享:PHP刪除數(shù)組中特定元素的兩種方法
這篇文章介紹了PHP中刪除數(shù)組中特定元素的兩種方法,有需要的朋友可以參考一下 方法一: 復(fù)制代碼 代碼如下: ?php $arr1 = array(1,3, 5,7,8); $key = array_search(3, $arr1); if ($key !== false) array_splice($arr1, $key, 1); var_dump($arr1); ? 輸出: array(4)

來源:模板無憂//所屬分類:PHP教程/更新時間:2013-07-03
相關(guān)PHP教程