Каждый раз Вы делаете сложное редактирующее задание, продолжаете задаваться вопросом, существует ли более эффективный способ сделать это. Большинство раз, когда это - что-то, что можно описать простыми словами (как "абзацы подкачки текста", или "удаляют все после X символов в прокомментированных строках"), это - что-то, что можно выполнить просто в нескольких нажатиях клавиш в энергии.
существуют некоторые основные характеристики, которые чрезвычайно полезны, и Вы закончите использование все время. Те, которые я люблю большинство:
Спрашивает других программистов, какие функции они находят самыми полезными и принимают тех, которые соответствуют лучше Вашему мозгу. Идеи кражи от других людей .vimrc
с ( вот мой )
Ах, да ... опасность слов «Мы должны делать больше этого» без объяснения того, что каждый из них делает и в каких обстоятельствах вы бы их использовали. Для чего-то вроде delayed_job
вы можете даже использовать fork
, не зная, что вы используете fork
. Тем не менее, это действительно не имеет значения. Райан говорил об использовании fork
для предварительной установки серверов. delayed_job
будет использовать fork
для превращения процесса в демона. Один и тот же системный вызов, разные цели. Запуск delayed_job
на переднем плане (без вилки
) и в фоновом режиме (с вилкой
) приведет к незначительной разнице в производительности.
Однако, если вы напишите сервер, который принимает одновременные соединения, теперь совет Райана верен.
fork
: создает копию исходного процесса execve
: прекращает выполнение текущего файла и начинает выполнение нового файла в том же процессе (очень полезно в задачах rake) pipe
: создает канал (два файловых дескриптора, один для чтения, один для записи) пара сокетов
: как канал, но для сокетов выберите
: давайте дождемся готовности одного или нескольких файловых дескрипторов с таймаутом kill
: используется для отправки сигнала процессу sigaction
: позволяет вам изменить то, что происходит, когда процесс получает сигнал 5 месяцев спустя вы можете посмотреть мое решение на http://github.com/antarestrader/Updater. Посмотрите lib/updater/fork_worker.rb