четверг, 1 ноября 2007 г.

Процессы & Потоки

Процессы

Процессом обычно называют экземпляр выполняемой программы.

Хотя на первый взгляд кажется, что программа и процесс понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс это набор ресурсов и данных, использующихся при выполнении программы. Процесс в Windows состоит из следующих компонентов:

- Структура данных, содержащая всю информацию о процессе, в том числе список открытых дескрипторов различных системных ресурсов, уникальный идентификатор процесса, различную статистическую информацию и т.д.;

- Адресное пространство - диапазон адресов виртуальной памяти, которым может пользоваться процесс;

- Исполняемая программа и данные, проецируемые на виртуальное адресное пространство процесса.

Потоки

Процессы инертны. Отвечают же за исполнение кода, содержащегося в адресном пространстве процесса, потоки. Поток (thread) - некая сущность внутри процесса, получающая процессорное время для выполнения. В каждом процессе есть минимум один поток. Этот первичный поток создается системой автоматически при создании процесса. Далее этот поток может породить другие потоки, те в свою очередь новые и т.д. Таким образом, один процесс может владеть несколькими потоками, и тогда они одновременно исполняют код в адресном пространстве процесса. Каждый поток имеет:

- Уникальный идентификатор потока;

- Содержимое набора регистров процессора, отражающих состояние процессора;

- Два стека, один из которых используется потоком при выполнении в режиме ядра, а другой - в пользовательском режиме;

- Закрытую область памяти, называемую локальной памятью потока (thread local storage, TLS) и используемую подсистемами, run-time библиотеками и DLL.

вторник, 23 октября 2007 г.

Уважаемые коллеги!

Друзья! Убедительная просьба: пожалуйста, оставляйте комментарии к постам! Так я буду знать что мой труд не напрасен! Любые замечания и пожелания обязательно будут рассмотрены и приняты во внимание! Ели у вас появились вопросы не стесняйтесь и задавайте их в комментариях - я буду рад вам ответить, тем более что возможно эти ответы пригодятся и другим нашим коллегам! Отправить комментарий можно нажав на ссылку внизу поста, если вы стесняетесь или не хотите указывать своего имени выберете опцию "Анонимный"; если у вас нет собственной странички указывайте любую даже не существующую. Спасибо!

четверг, 11 октября 2007 г.

Мелочи на C# облегчающие жизнь: Real World Examples

Некоторые полезные мелочи которым я научился программируя на C#:

1. Вызов функции из С библиотеки:
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
extern static short QueryPerformanceCounter(ref long x);


2. Перегрузка индексатора (перегрузка оператора []):
public float this[int row, int col]
{
get
{ return GetElement(row, col); }
set
{ SetElement(row, col, value); }
}


3. Символ @ в начале строки позволяет записывать строку, не дублируя слеши, как это было в С++, то есть строка:
string FileName = "c:\\temp\\test.txt";
Полностью идентична строке:
string FileName = @"c:\temp\test.txt";
Не правда ли читабельнее! ;-)

4. Символ @ перед идентификатором (именем переменной) означает, что компилятор должен разрешить использовать данное имя идентификатора, даже если оно зарезервированоое слово:
int this = 42; // не компилируется, ошибка:
// Identifier expected, 'this' is a keyword

int @this = 42; // Компилируется нормально


5. Смело юзайте #region и #endregion для выделения секций кода. Очень помогает!