我有這樣的問題:NSOperationQueue VS並行線程的優先級
- 我有一些使用線程的C++代碼。這些線程是pthread類型。我使用
NSOperationQueue
和一些C++代碼。
問題是這樣的:C++ pthread的優先級總是低於NsOperationQueue
。
我該如何解決這個問題?我也試圖給NSOpertionQueue
低優先級,但此修復程序不起作用。
我有這樣的問題:NSOperationQueue VS並行線程的優先級
NSOperationQueue
和一些C++代碼。問題是這樣的:C++ pthread的優先級總是低於NsOperationQueue
。
我該如何解決這個問題?我也試圖給NSOpertionQueue
低優先級,但此修復程序不起作用。
如果你不得不求助於優先級(特別是向上),它通常表示併發模型的設計缺陷。這應該保留用於非常特殊的情況,例如實時線程(例如音頻回放)。
首先評估您的線程和任務如何操作,並確保您沒有其他選擇。通常情況下,您可以做一些簡單的事情,例如減少操作隊列的最大操作數,減少總線程數,或將您的任務按其需要的資源分組。
你用什麼方法來確定線程的優先級?
另請注意,設置操作的優先級會影響排隊操作的排序(而不是線程本身)。
我一直可以通過調整分配來解決這個問題。你應該現在停止閱讀:)
可用,但不建議:
爲了降低操作的優先級,你可以在接近它的操作的main
:
- (void)main
{
@autorelease {
const double priority = [NSThread threadPriority];
const bool isMainThread = [NSThread isMainThread];
if (!isMainThread) {
[NSThread setThreadPriority:priority * 0.5];
}
do_your_work_here
if (!isMainThread) {
[NSThread setThreadPriority:priority];
}
}
}
如果您畢竟真的需要推內核,這是你如何設置pthread的優先級: