|
|
|
Программирование |
О программированииТермин "программирование" очень широкий, громадный, в него можно включать разные понятия и процессы. Здесь под словом программирование понимается разработка стационарных программ для ПК. Web-программирование я рассматриваю отдельно внутри раздела сайтостроение. Одним из ключевых моментов программирования является выбор языка. Условно языки можно поделить на две группы - компилируемые и интерпретируемые. О яыках программированияВ различных языках программирования есть очень много общего. А причина в том, что программа на любом языке по сути обращается к одним первоисточникам, - доступ к машинным ресурсам и средствам операционной системы. Как бы мы не пытались писать кроссплатформный софт, всё равно на каком-то уровне (вглубь языка) мы всё равно упираемся в ограничения или дополнительные возможности ОС. Конечно, можно смотреть ещё глубже, чтобы стирались отличия разных ОС. Говорят, что в Linux кроме файлов вообще ничего нет. Я до этого уровня глубины ещё не дошёл, и, наверное, не буду пытаться. Когда я учился в университете, то думал, что в языке должны быть:
Любой язык для меня был ограничен этими понятиями, и даже библиотеки GUI и БД волновали меня только в плане своего существования. И просмотрев несколько книжек я смело писал в своих резюме, что знаю Delphi, C++, Java и что угодно ещё. Теперь, просматривая те же книжки, дополнительно я ищу в них информацию:
Эти сущности могут вызывать некоторые затруднения в сравнении с предыдущим списком, по-этому опишу их подробнее. ПроцессыЗапуская диспетчер задач Windows, мы видим список процессов. Здесь подразумеваются именно эти процессы. Процесс - это экземпляр выполняющейся программы. Т.е. запустив три раза Far manager - мы получаем три процесса. Тут всё понятно. Языки программирования могут иметь средства для управления процессами, а именно - создание дочерних процессов и контроль за их выполнением. Находясь внутри программы вызваем функцию fork (это функция уровня ОС), которая создаёт новый процесс. Новый процесс создаётся как копия родительского, с одним маленьким отличием. Чтобы отличить процессы друг от друга у каждого из них есть PID (Process ID). Функция fork вернёт значение PID только в родительский процесс, в дочерний процесс прийдёт значение 0. Есть так же возможность проследить, когда завершиться дочерний процесс и получить код результата. Память для дочернего процесса так же копируется и изначально идентична памяти родительского процесса. Находясь внутри процесса можно подменить текущий процесс на заданный. Т.е. выполняется программа А, что-то делается, порождает дочерний процесс (создаётся копия А). Затем дочерний процесс подменяется на программу Б с жёсткого диска. Получается, что программа А запустила программу Б и может следить за её выполнением. ПотокиНесколько процессов нужны для того, чтобы разная работа могла выполняться параллельно. Пока мы набираем текст в OpenOffice (наш основной процесс, на котором мы сосредотачиваем внимание), AIMP может прокручивать музыку, а ClaimWin будет сканировать комп на вирусы. Примерно то же самое с потоками. Внутри процесса может быть несколько потоков. Всегда есть главный поток, время жизни которого совпадает со временем жизни процесса. И могут порождаться второстепенные потоки. Во второстепенных потоках может выполняться какая-то фоновая работа, например, ожидание асинхронного запроса. Например, в основном потоке программы может идти обработка действий пользователя, а во второстепенных выполняется получение каких-нибудь данных из сети. Когда все данные будут загружены, то только в этот момент пользователь получит соответствующее сообщение. Все потоки одного процесса работают с одими и теми же данными. По-этому, нужно следить, чтобы данные из разных потоков не изменялись одновременно, что может привести к ошибкам работы программы. СокетыСокет — это сущность для обмена данными между двумя компьютерами или для передачи данных между двумя процессами на одном компьютере. Проще всего представить себе работу с сокетами как работу с файлами: у нас есть два процесса и каждый работает с собственным файловым дескриптором. Один процесс записывает в файл, а другой читает из своего файла. Фишка в том, что записанное в первый файл автоматически оказывается внутри содержимого второго файла. Информация для считывания — это просто последовательность байт. Чтобы разобрать, что же именно хотел отправить второй процесс первому, нужно разработать свой протокол. Протокол это последовательность передаваемых пакетов данных. Чтобы отделить пакеты друг от друга в потоке байт, можно добавить несколько специальных символов-разделителей, которые не могут встретиться внутри пакета. Например, если мы передаём последовательность цифр, то тогда разделителем могут быть три идущие подряд буквы «а». Получая и обрабатывая пакеты, процесс понимает, что ему нужно отправить обратно. Когда создаётся первый сокет, то для него устанавливают, с какого адреса (или каких адресов) и с какого порта он может получить сообщение. Про этот сокет говорят, что он слушает определённый порт. Второй сокет присоединяется по IP-адресу и порту к первому сокету. Чтобы слушающий сокет мог и дальше принимать сообщения, то внутри его процесса создаётся ещё один сокет. Т.е. для организации взаимодействия получается нужно три сокета: слушающий (первый), второй — тот, который обратился, и третий — тот, который будет отвечать на запрос второго. Процесс, имеющий слушающий сокет будет серверным. Переменные окруженияВы знаете, что когда какая-то программа устанавливается, то она может получать расположение разных служебных директорий, имя пользователя, изменять PATH. Эти и другие системные параметры называются переменными окружения. В разных языках программирования есть средства для работы с этими данными. Обычно эти данные можно получить в виде ассоциативного массива. В качестве ключей - название соответствующих переменных. Но, например, в Adobe AIR, на сколько я помню, для получения таких переменных нужно вызывать несколько различных функций. Следует обратить внимание, что в разных операционных системах суть одни и те же переменные могут называться по разному, например USER и USERNAME. Копирование текста "Программирование" или его частей без письменного разрешения автора запрещено. (с) Аристов Алексей, март-апрель 2010 |
|
|
рекламное место свободно |
|