手動實現多任務排程控制器

2021-06-22 04:48:22 字數 2651 閱讀 3337

我們知道

cpu處理多執行緒時是利用執行緒排程來實現的

,執行緒排程主要依據執行緒的組別

(是否前台

)和優先順序來進行

,我們可以利用乙個執行緒來模擬

cpu的單核行為

,對多工進行排程。

在任務執行過程中可能發生各種各樣的狀態和階段,可以利用監聽者模式,來通知監聽者任務的排程狀態。

(4)任務排程主線程:

首先定義乙個***類,用於執行緒執行狀態的反饋;

public class mylistener

實現主控制器,首先該控制器必須為單例,其次其為乙個執行緒,不斷的迴圈處理任務,可執行任務封裝為

command

,且其必須實現

comparable

介面,用以對不同優先順序的任務進行排程。(1

)任務封裝:

/**

* 訊息佇列中的命令封裝

* 命令排程:1比較是否為isforeground執行緒 2比較sequence 大小,越大優先順序越高

* @author

* */

static class command implements comparable else if(!another.isforeground && isforeground) else

} }

(2

)主控制器類:

public class mycontroller implements runnable 

return inst;

} (3)構造方法為private ,且在構造方法中開啟自己的主線程

/*** 構造方法

*/mthread = new thread(this);//執行緒使用runnable物件初始化

mthread.setname("mycontroller");

mthread.start();

}

(3)構造方法為private ,且在構造方法中開啟自己的主線程

/**

* 構造方法

*/mthread = new thread(this);//執行緒使用runnable物件初始化

mthread.setname("mycontroller");

mthread.start();

}

4)任務排程主線程:

@override

public void run()

try catch(exception e) catch (interruptedexception e)

}}.start();}}

//任務執行成功,訊息通知

for (mylistener l : getlisteners(command.mlistener))

} catch(exception e)

mbusy = false;

}}

5)任務新增

/**

* 任務佇列任務管理,任務新增

* 每次新增任務,如果失敗,重複新增5次,如果仍然失敗可以丟擲錯誤

*/private void putcommand(blockingqueuequeue, string description, mylistener listener, runnable runnable, boolean isforeground) catch (interruptedexception ie) catch (interruptedexception e1)

e = ie;}}

throw new error(e);

} /**

* 預設新增到後台

* @param description

* @param listener

* @param runnable

*/private void putbackground(string description, mylistener listener, runnable runnable)

/*** 預設新增到前台組

* @param description

* @param listener

* @param runnable

*/private void putforground(string description, mylistener listener, runnable runnable)

(6

)***控制:

/**

* 監聽通知

*/public void addlistener(mylistener listener)

public void removelistener(mylistener listener)

public setgetlisteners(mylistener listener)

setlisteners = new hashset(mlisteners);

listeners.add(listener);

return listeners;

}

python 實現多工udp聊天器

相關 import socket import threading def recv msg udp socket 接收資料並顯示 接收資料 while true recv data udp socket.recvfrom 1024 print recv data def send msg udp ...

手動調整域控制器之間的複製時間

站點內的域控制器之間的複製預設為每小時4次,管理員可以根據需要調整複製的時間,或者可以設定在某個時間段內不允許複製。在域控制器上開啟 ad站點和服務 並展開ntds settings,如下圖,右擊右側的 automatically generated 選擇 屬性 再選擇 change schedul...

SDN架構中 控制器實現之一 POX控制器的研究

pox的自帶的元件來分析 開始構建自己的 pox 模組的常用方法是將現有模組 例如 forwarding l2 learning.py 複製到 ext 目錄 例如 ext my component.py 下發流表操作 按照元件的功能進行分類 控制器和交換機根據openflow協議進行通訊前,使用of...