Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QNX/UNIX: Анатомия ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 23

Автор ОлСг Π¦ΠΈΠ»ΡŽΡ€ΠΈΠΊ

 exit(EXIT_SUCCESS);

}

НаконСц, для ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ объСм Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ «классичСской» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (Ρ„Π°ΠΉΠ» p4-3.cc):

int main(int argc, char *argv[]) {

 int numpar = 1;

 if (argc > 1 && atoi(argv[1]) > 0)

  numpar = atoi(argv[1]);

 _clockperiod clcold;

 ClockPeriod(CLOCK_REALTIME, NULL, &clcold, 0);

 if (argc > 2 && atoi(argv[2]) > 0) {

  _clockperiod clcnew = { atoi(argv[2]) * 1000, 0 };

  ClockPeriod(CLOCK_REALTIME, &clcnew, &clcold, 0);

 }

 timespec interval;

 sched_rr_get_interval(0, &interval);

 cout << "Rescheduling interval = "

  << (double)interval.tv_nsec / 1000000. << " msec." << endl;

 uint64_t t = ClockCycles();

 workproc(1000 * numpar);

 t = ClockCycles() - t;

 cout << "Single scheduling time. " << cycle2milisec(t)

  << " msec. [" << t << " cycles]" << endl;

 ClockPeriod(CLOCK_REALTIME, &clcold, NULL, 0);

 exit(EXIT_SUCCESS);

}

ВыполняСм 3 ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… тСста для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° систСмного Ρ‚ΠΈΠΊΠ° (ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΏΠΎ 3 запуска) Π² Ρ‚Π°ΠΊΠΎΠΌ порядкС: ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ процСсс, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссы:

# nice -n-19 p4-3 10

Rescheduling interval = 3.99939 msec

Single scheduling time: 5928.8 msec [3169850746 cycles]

# nice -n-19 p4-2 10

Rescheduling interval = 3.99939 msec.

Threads scheduling time: 5919.82 msec. [3165049513 cycles]

# nice -n-19 p4-1 10

Rescheduling interval = 3.99939 msec.

Forks scheduling time: 5962.21 msec. [3187713371 cycles]


# nice -n-19 p4-3 10 50

Rescheduling interval = 0.197788 msec

Single scheduling time: 6427.33 msec. [3436394566 cycles]

# nice -n-19 p4-2 10 50

Rescheduling interval = 0.197788 msec.

Threads scheduling time: 6207.96 msec. [3319104030 cycles]

# nice -n-19 p4-1 10 50

Rescheduling interval = 0.197788 msec

Forks scheduling time 6029.23 msec. [3223548073 cycles]


# nice -n-19 p4-3 10 20

Rescheduling interval = 0.077104 msec.

Single scheduling time: 6745.37 msec. [3606433666 cycles]

# nice -n-19 p4-2 10 20

Rescheduling interval = 0.077104 msec

Threads scheduling time: 6762.69 msec [3615692975 cycles]

# nice -n-19 p4-1 10 20

Rescheduling interval = 0.077104 msec

Forks scheduling time: 6647.42 msec [3554062343 cycles]


# nice -n-19 p4-3 10 11

Rescheduling interval = 0.04358 msec

Single scheduling time. 7517.74 msec [4019381476 cycles]

# nice -n-19 p4-2 10 11

Rescheduling interval = 0.04358 msec

Threads scheduling time: 7638.89 msec. [4084155676 cycles]

# nice -n-19 p4-1 10 11

Rescheduling interval = 0.04358 msec.

Forks scheduling time: 7679 29 msec. [4105758575 cycles]


# nice -n-19 p4-3 10 10

Rescheduling interval = 0.036876 msec.

Single scheduling time: 7937.35 msec. [4243731124 cycles]

# nice -n-19 p4-2 10 10

Rescheduling interval = 0.036876 msec.

Threads scheduling time. 8136.42 msec. [4350159949 cycles]

# nice -n-19 p4-1 10 10

Rescheduling interval = 0.036876 msec

Forks scheduling time: 8172.35 msec [4369372230 cycles]

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ достаточно Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌΠΈ: Π²ΠΎ всСх 3-Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… (Π² Π³Ρ€ΡƒΠΏΠΏΠ°Ρ…) это практичСски ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Ρ†ΠΈΡ„Ρ€Ρ‹ β€” различия Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссах (ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ случаи) Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ 0,5–2%! Но Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, вСдь, ΠΊΠ°ΠΊ извСстно, Β«ΠΈΠ· пСсни слова Π½Π΅ Π²Ρ‹ΠΊΠΈΠ½Π΅ΡˆΡŒΒ».

Π­Ρ‚ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ (ΠΏΡƒΡΡ‚ΡŒ Π³Ρ€ΡƒΠ±ΠΎ ΠΈ ΠΎΡ†Π΅Π½ΠΎΡ‡Π½ΠΎ) Β«Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒΒ» Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ обслуТиваниСм систСмного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° (слуТбы Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ОБ) ΠΈ диспСтчСризациСй. Π•Ρ‰Π΅ Ρ€Π°Π· обратимся ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ:

# nice -n-19 p4-3 10

Rescheduling interval = 3.99939 msec.

Single scheduling time: 5928.8 msec. [3169850746 cycles]

To Π΅ΡΡ‚ΡŒ Π½Π° протяТСнии Β«Ρ€Π°Π±ΠΎΡ‚Ρ‹Β» Π±Ρ‹Π»ΠΎ 5928,8/0,9998475 = 5929 ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΎΡ‚ слуТбы Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

# nice -n-19 p4-3 10 10

Rescheduling interval = 0.036876 msec

Single scheduling time: 7937.35 msec. [4243731124 cycles]

На этот Ρ€Π°Π· Π·Π° счСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° систСмного Ρ‚ΠΈΠΊΠ° Π½Π° 2 порядка Π½Π° протяТСнии Β«Ρ€Π°Π±ΠΎΡ‚Ρ‹Β» (Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ объСма ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹!) Π±Ρ‹Π»ΠΎ ΡƒΠΆΠ΅ 7937,35/0,009219 = 860977 событий диспСтчСризации.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ объСм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, выполняСмый Π² этих Π΄Π²ΡƒΡ… случаях, остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎ Π½Π° обслуТиваниС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… 860 977 β€“ 5929 = 855 048 систСмных Ρ‚ΠΈΠΊΠΎΠ² (совмСстно с 855 048/4 = 213 762 Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ диспСтчСризации) ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ Ρ‚Π΅ 4 243 731 124 β€“ 3 169 850 746 = 1 073 880 378 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°ΠΊΡ‚ΠΎΠ² процСссора, ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ»ΠΎ 1256 Ρ‚Π°ΠΊΡ‚ΠΎΠ² Π½Π° ΠΎΠ΄ΠΈΠ½ систСмный Ρ‚ΠΈΠΊ. Π Π°Π½Π΅Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ ΠΎΡ†Π΅Π½ΠΊΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚ собствСнно Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкстов ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами (617) ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ (374), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ происходят ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ систСмный Ρ‚ΠΈΠΊ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ контСкста Β«ΠΎΡ‚ΡŠΠ΅Π΄Π°Π΅Ρ‚Β» Π² срСднСм 90–150 (ΒΌ Ρ‡Π°ΡΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкста) Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ систСмный Ρ‚ΠΈΠΊ ΠΈΠ»ΠΈ, Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 10% Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° обслуТиваниС слуТбы систСмных часов.

ΠŸΠΎΠΏΡ‹Ρ‚Π°Π΅ΠΌΡΡ ΠΎΡΠΌΡ‹ΡΠ»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

β€’ Π’рСмя ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ адрСсных пространств процСссов, управляСмых MMU Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкстов ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ восстановлСния контСкста Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, но…

β€’ β€¦Π½ΠΎ объСм Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ систСмного Ρ‚ΠΈΠΊΠ° (прСрывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°) Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ объСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкстов (рис. 2.7), Ρ‡Ρ‚ΠΎ это практичСски ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½ΠΈΠ²Π΅Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Ρ… процСссов, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Рис. 2.7. Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρ‹, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ частоты систСмных часов

На рис. 2.7 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΊΠΎΠ² систСмных часов ΠΈ связанная с нСю ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π°ΠΊΡ‚ΠΎΠ² диспСтчСризации. ΠŸΡ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° наступлСния систСмных Ρ‚ΠΈΠΊΠΎΠ² (частоты Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ ΠΎΡ‚ систСмных часов) Π² силу фиксированных объСмов ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ°ΠΊ для ΠΎΠ΄Π½ΠΈΡ…, Ρ‚Π°ΠΊ ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… дСйствий, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ доля Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΎΡΡ‚Π°ΡŽΡ‰Π°ΡΡΡ для выполнСния ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΠ°Π΄Π°Π΅Ρ‚.

β€’ Π˜ это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², диспСтчСризуСмых с дисциплиной RR (вытСсняСмых ΠΏΠΎ истСчСнии Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌ ΠΊΠ²Π°Π½Ρ‚Π°), Π½ΠΎ ΠΈ для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с любой дисциплиной диспСтчСризации, Π² Ρ‚ΠΎΠΌ числС ΠΈ FIFO, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΡ‚ΠΎΠΊ (Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΏΠΎΡ‚ΠΎΠΊ Π½Π°ΠΈΠ²Ρ‹ΡΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° Π² систСмС) Π²ΠΎΠΎΠ±Ρ‰Π΅ Β«Π½Π΅ собираСтся» Π½ΠΈΠΊΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

β€’ Π”ля программиста-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ этого тСста ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ абсурдноС с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ элСмСнтарной (Π½ΠΎ повСрхностной) Π»ΠΎΠ³ΠΈΠΊΠΈ: РаспараллСливаниС Π·Π°Π΄Π°Ρ‡ΠΈ (Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) Π½Π° N Π²Π΅Ρ‚Π²Π΅ΠΉ (Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ использованиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ процСссов) практичСски Π½Π΅ измСняСт ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ врСмя Π΅Π΅ выполнСния.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ рассмотрСния ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ диспСтчСризации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (сохранСния ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкстов), ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΎΠ΄Π½ΠΎΠΌΡƒ процСссу, Π½ΠΈ Π² Ρ‡Π΅ΠΌ Π½Π΅ прСвосходит ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ диспСтчСризации Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ процСссам. И Π² этом своСм качСствС β€” эффСктивности ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° выполнСния β€” ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² своСй «лСгковСсности» Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ прСвосходят Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссы.[25]

Π’ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ всС Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ тСстовыми прилоТСниями для ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ вопрос: «Насколько эффСктивно ОБ QNX ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ прилоТСния, содСрТащиС большоС («слишком большоС») количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²? ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ это выглядит. ВсС выполнСния ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡ€ΠΈ минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ систСмного Ρ‚ΠΈΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ОБ сущСствСнно Π±ΠΎΠ»Π΅Π΅ Β«ΠΎΠ·Π°Π±ΠΎΡ‡Π΅Π½Π°Β» своими Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ процСссами, Π½Π΅ΠΆΠ΅Π»ΠΈ процСссом вычислСний:

# nice -n-19 p4-2 2 10

Rescheduling interval = 0.036876 msec.

Threads scheduling time: 1555.43 msec [831574415 cycles]

# nice -n-19 p4-2 20 10

Rescheduling interval = 0.036876 msec.

Threads scheduling time: 15642 msec. [8362674590 cycles]

# nice -n-19 p4-2 200 10

Rescheduling interval = 0.036876 msec

Threads scheduling time: 161112 msec. [86134950020 cycles]

ΠΠ°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ линСйная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ числа ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (ΠΎΡ‚ 2 Π΄ΠΎ 200). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, врСмя выполнСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² практичСски Π½Π΅ зависит ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ числа ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ с Π½ΠΈΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ ΡƒΠΆΠ΅ для случая ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… процСссов:

# nice -n-19 p4-1 2 10

Rescheduling interval = 0.036876 msec.

Forks scheduling time: 1622.87 msec [867633362 cycles]

# nice -n-19 p4-1 20 10

Rescheduling interval = 0.036876 msec.

Forks scheduling time: 16682.1 msec [8918698991 cycles]

# nice -n-19 p4-1 200 10

Rescheduling interval = 0.036876 msec

Forks scheduling time: 173398 msec. [92703484992 cycles]

Π—Π΄Π΅ΡΡŒ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ лишь Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΊΡ€ΡƒΡ‚ΠΈΠ·Π½Ρ‹ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ зависимости, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходам Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ достаточно большого числа записСй ΠΎ процСссах Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° процСссов, Π½ΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° этого эффСкта Ρ‚Π°ΠΊΠΆΠ΅ вСсьма малосущСствСнна.

Π’ ΠΈΡ‚ΠΎΠ³Π΅, Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ «лСгковСсности» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: