Net, преглед на многонишково

За прилагането на многонишкова, има няколко причини. Да предположим, че в заявката му обръщат към всеки сървър в мрежата, което може да отнеме известно време. Аз не бих искал да UI, защото той беше блокиран, а потребителят трябва да изчака само за момента, когато сървърът връща отговор. Потребителят може да извърши по това време друго действие или дори да отмени искането се изпраща до сървъра. В такива ситуации, използването на обезщетения многонишкова.







За всички видове дейности, които изискват чакат, например, в резултат на получаване на достъп до даден файл, база данни или мрежа, да пуснете нова тема, която позволява да се извърши в същото време други задачи. Multithreading може да ви помогне, дори и ако има само един наситен по отношение на задачите на обработка. Множество потоци от един и същ процес могат да бъдат извършени едновременно от различни процесори, или, по-често тези дни, различни ядра на многоядрен процесор.

Разбира се, че е необходимо да се знае, функциите, изпълняващи едновременно множество нишки. Поради факта, че те се извършват по едно и също време, когато те получават достъп до едни и същи данни могат да бъдат проблеми. За да се предотврати това да се случи, за да бъдат приложени механизми за синхронизиране.

В приложение, което работи на сървъра, една нишка, винаги чака искане от страна на клиента, и затова се нарича поток-слушател (слушател резба) а. При получаване на искането, незабавно го препраща на отделен работник конци (работник конци) а. което той продължава за по-нататъшно взаимодействие с клиента. слушателя на потока веднага след това се връща в своите задължения в очакване на пристигането на следващото искане от друг клиент.

Всеки процес се състои от един ресурс, като например прозорци описания, файлови указатели и други обекти на ядрото е подчертана в областта на виртуалната памет и се състои от най-малко една нишка. Потоци са планирани за изпълнение на операционната система. Всеки един поток е с приоритет, програмата брояч да показва мястото в програмата, където има обработка и купчина, в която се съхраняват локални променливи поток. Стек всяка нишка изглежда по различен начин, но споменът за програмен код и много споделя между всички теми, които функционират в рамките на един и същ процес.

Това позволява потоци в един процес бързо взаимодействат един с друг, тъй като всички потоци на процеса се отнасят до същата виртуалната памет. Въпреки това, той също така е източник на усложнения, тъй като той позволява множество нишки променят същия район памет.

Основи многонишково

Има два вида на многозадачност: базирани нишка процес на базата на и. В тази връзка е важно да се разбере, че разликите между тях. Процесът е отговорно за управлението на ресурсите, които включват виртуална памет и Windows дръжки, и съдържа най-малко една нишка. се изисква присъствието на поне един поток за изпълнение на всяка програма. Поради това, на базата на многозадачност процеси - е средството, чрез което компютърна програма могат да бъдат два успоредни извършва и други.

Разликите в многозадачност, основани на процеси и нишки могат да бъдат обобщени, както следва: многозадачност, базирани процеси, организирани за паралелно изпълнение на програмите, както и многозадачност поток базирани - за паралелно изпълнение на отделните части на една единствена програма.







Основното предимство на многонишково е, че тя позволява да се пишат програми, които работят много ефективно с възможността да се възползвате от престоите, които неизбежно възникват по време на изпълнението на повечето програми. Както е известно, повечето от входно-изходни устройства, дали устройства, свързани към мрежата пристанища, дискови устройства или клавиатура, са много по-бавно от централния процесор (CPU). Ето защо, повечето от времето си в програмата, трябва да се изчака да изпраща данни към входно-изходно устройство или получаване на информация от нея. И благодарение на програма за обработка на мулти-конец могат да решат някакъв друг проблем по време на престой.

Например, докато една част от програмата изпраща файла чрез интернет връзка, от друга страна може да изпълнява четенето на текстовата информация от клавиатурата, а третият - за извършване на буфериране на следващия блок от данни, изпратени.

два вида потоци са определени в в .NET Framework: преден и заден план. По подразбиране, създаден поток автоматично се превръща в приоритет, но е възможно да се направи на заден план. Единствената разлика от приоритета на фона конец е, че на фона нишка се прекратява автоматично, ако спря всички приоритетни потоци в своя процес.

Във връзка с организирането на многозадачна въз основа на потока има нужда от специален вид режим, който се нарича синхронизация и ви позволява да координира изпълнението на конец доста специфичен начин. За тази синхронизация, C # в отделна подсистема.

Всички процеси се състоят от най-малко една нишка, която обикновено се нарича като основен, тъй като тя е тук, че да е стартирала. От главния поток може да се създадат и други теми.

В C # език и Рамката на .NET се поддържат на двата вида многозадачност: Процесът основа и базиран на нишки. Ето защо, C # означава, че можете да създадете процесите и потоците, както и се справят и тези, както и другите. За да се започне нов процес на програмиране изисква доста усилия, тъй като всеки предишен процес е напълно отделен от следващия.

Много по-важно е подкрепата в C # многонишков преработка, чрез които улеснява писането на висока производителност, многонишков програмиране в C # в сравнение с някои други езици.

Класовете, които подкрепят многонишковите програми, в пространството, определено имената на System.Threading. Ето защо, всеки многонишковите C # програма включва следния код:

System.Threading именно пространство съдържа различни видове, което позволява да се създаде многонишковите приложения. Може би сред които е класа Thread. защото е отделна нишка. За да получите по програмен препратка към потока, тя изпълнява специфична инстанция, просто се обадете статично Thread.CurrentThread на имота:

На платформата .NET, не е налице пряка кореспонденция "12:59" между сфери на приложение (AppDomain) и потоци. В действителност, някои AppDomain може да има множество нишки, работещи във всеки даден момент. Освен това, специално резба не е свързан с един домейн прилагане по време на живота си. Потоци могат да преминават границите на сферите на приложение, където е угодно и CLR Windows разписание.

Въпреки че активните потоци могат да преминават AppDomain граници, всеки поток при всеки даден момент може да се извърши в един домейн приложение (с други думи, не е възможно, че една нишка работи в повече от едно приложение домейн веднага). За да получите достъп до програмно AppDomain, която тече на текущата нишка, обадете се на статичен метод Thread.GetDomain ():

Единственият потока също може по всяко време да бъдат преместени в специфичен контекст, и то може да бъде преместен в новия контекст на CLR каприз. За текущия контекст, в който се изпълнява нишката, използвайте статично Thread.CurrentContext собственост (която връща System.Runtime.Remoting.Contexts.Context обект):

За пореден път, за движението на потоците между сфери на приложение и контексти отговаря CLR. Както .NET разработчик винаги ще остане в блажено неведение за това, кога приключи всеки отделен поток (или точно там, където тя се поставя след хода). Независимо от това, че е полезно да се знае за различните начини за получаване на основните примитиви.