Հոսքերը Windows ՕՀ - ում
Ներածություն Ներածություն Հոսքի ստեղծումը Հոսքի ստեղծումը Հոսքի ավարտը Հոսքի ավարտը Հոսքի ստեկը Հոսքի ստեկը Հոսքերի առաջնայնությունը և պլանավորումը Հոսքերի առաջնայնությունը և պլանավորումը
Ներածություն Հոսքը աշխատում է պրոցեսի ներքո Հոսքը աշխատում է պրոցեսի ներքո Հոսքը այն փոքրագույն էլեմենտն է որին հատկացվում է պրոցեսորի ժամանակ ՕՀ - ի կողմից Հոսքը այն փոքրագույն էլեմենտն է որին հատկացվում է պրոցեսորի ժամանակ ՕՀ - ի կողմից Հոսքը կարող է իրականացնել պրոցեսի ցանկացած կոդ, ներառյալ այն կոդերը որոնք արդեն իրականացվել են այլ հոսքերի կողմից Հոսքը կարող է իրականացնել պրոցեսի ցանկացած կոդ, ներառյալ այն կոդերը որոնք արդեն իրականացվել են այլ հոսքերի կողմից
Ներածություն Thread pool( հոսքերի խուրց )- ը դա աշխատող հոսքերի համախումբ է որը իրականացնում է ասինխրոն callback- ների իրականացում Thread pool( հոսքերի խուրց )- ը դա աշխատող հոսքերի համախումբ է որը իրականացնում է ասինխրոն callback- ների իրականացում
Հոսքի ստեղծումը CreateThread ֆունկցիան ստեղծում է նոր հոսք տվյալ պրոցեսի համար : CreateThread ֆունկցիան ստեղծում է նոր հոսք տվյալ պրոցեսի համար : Ծնող հոսքը զավակ հոսք ստեղծելիս պարտավոր է նշել այն հասցեն որտեղից սկսած պետք է զավակ հոսքը իրականացնի կոդի կատարումը : Սովորաբար այդ հասցեն CreateThread ֆունկցիային փոխանցված ֆունկցիայի հասցեն է : Ծնող հոսքը զավակ հոսք ստեղծելիս պարտավոր է նշել այն հասցեն որտեղից սկսած պետք է զավակ հոսքը իրականացնի կոդի կատարումը : Սովորաբար այդ հասցեն CreateThread ֆունկցիային փոխանցված ֆունկցիայի հասցեն է :
Հոսքի ստեղծումը Փոխանցվող ֆունկցիան ընդունում է մեկ void* տիպի պարամետր և վերադարձնում է DWORD տիպի պարամետր : Փոխանցվող ֆունկցիան ընդունում է մեկ void* տիպի պարամետր և վերադարձնում է DWORD տիպի պարամետր :
Հոսքի ստեղծումը HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize, _In_ LPTHREAD_START_ROUTINE lpStartAddress, _In_opt_ LPVOID lpParameter, _In_ DWORD dwCreationFlags, _Out_opt_ LPDWORD lpThreadId);
Հոսքի ստեղծումը #include #include DWORD WINAPI MyThreadFunction( LPVOID lpParam ); typedef struct MyData { int val1; int val2; } MYDATA, *PMYDATA; int main() { PMYDATA pDataArray[MAX_THREADS]; DWORD dwThreadIdArray[MAX_THREADS]; HANDLE hThreadArray[MAX_THREADS];
Հոսքի ստեղծումը for( int i=0; i<MAX_THREADS; i++ ) { // pDataArray initialization // pDataArray initialization pDataArray[i]->val1 = i; pDataArray[i]->val2 = i+100; pDataArray[i]->val1 = i; pDataArray[i]->val2 = i+100; hThreadArray[i] = CreateThread( hThreadArray[i] = CreateThread( NULL, // default security attributes NULL, // default security attributes 0, // use default stack size 0, // use default stack size MyThreadFunction, // thread function name MyThreadFunction, // thread function name pDataArray[i], // argument to thread function pDataArray[i], // argument to thread function 0, // use default creation flags 0, // use default creation flags &dwThreadIdArray[i]); // returns the thread identifier &dwThreadIdArray[i]); // returns the thread identifier}
Հոսքի ստեղծումը WaitForMultipleObjects(MAX_THREADS, hThreadArray, TRUE, INFINITE); for(int i=0; i<MAX_THREADS; i++) { CloseHandle(hThreadArray[i]); CloseHandle(hThreadArray[i]);} return 0; } DWORD WINAPI MyThreadFunction( LPVOID lpParam ) { // …. // ….}
Հոսքի ավարտր Հոսքը կանչում է ExitThread ֆունկցիան Հոսքը կանչում է ExitThread ֆունկցիանExitThread Պրոցեսի կամայական հոսքը կանչում է ExitProcess ֆունկցիան Պրոցեսի կամայական հոսքը կանչում է ExitProcess ֆունկցիան ExitProcess Հոսքի ֆունկցիան ավարտում է իր աշխատանքը Հոսքի ֆունկցիան ավարտում է իր աշխատանքը Ցանկացած հոսք կանչում է TerminateThread ֆունկցիան տալով հոսքի հենդլերը Ցանկացած հոսք կանչում է TerminateThread ֆունկցիան տալով հոսքի հենդլերըTerminateThread Ցանկացած հոսք կանչում է TerminateProcess ֆունկցիան պրոցեսի հենդլերով Ցանկացած հոսք կանչում է TerminateProcess ֆունկցիան պրոցեսի հենդլերովTerminateProcess
Հոսքի ստեկը Ըստ լռելիության ստեկի չափը մեկ մեգաբայթ է Ըստ լռելիության ստեկի չափը մեկ մեգաբայթ է Ըստ լռելիության չափը տրվում է իրականացվող ֆայլի մեջ սկզբում (header) Ըստ լռելիության չափը տրվում է իրականացվող ֆայլի մեջ սկզբում (header) Ստեկը ազատվում է, երբ հոսքը վերջացնում է իր աշխատանքը Ստեկը ազատվում է, երբ հոսքը վերջացնում է իր աշխատանքը
Հոսքերի առաջնայնությունը և պլանավորումը Գոյություն ունեն հետևյալ առաջնայնությունները IDLE_PRIORITY_CLASS IDLE_PRIORITY_CLASS BELOW_NORMAL_PRIORITY_CLASS BELOW_NORMAL_PRIORITY_CLASS NORMAL_PRIORITY_CLASS NORMAL_PRIORITY_CLASS ABOVE_NORMAL_PRIORITY_CLASS ABOVE_NORMAL_PRIORITY_CLASS HIGH_PRIORITY_CLASS HIGH_PRIORITY_CLASS REALTIME_PRIORITY_CLASS REALTIME_PRIORITY_CLASS
Հոսքերի առաջնայնությունը և պլանավորումը Գոյություն ունեն պլանավորման հետևյալ ալգորիթմները First in first out First in first out Shortest remaining time Shortest remaining time Fixed priority pre-emptive scheduling Fixed priority pre-emptive scheduling Round-robin scheduling Round-robin scheduling Multilevel queue scheduling Multilevel queue scheduling
Հոսքերի առաջնայնությունը և պլանավորումը