Насколько я понимаю, это происходит потому, что не очищаются статические буферы CRT функций. Т.е. если не использовать внутри функции потока, CRT ф-ции, которые используют статические переменные, то и ликов тоже не будет.
Очевидно вы программируете под Linux/BSD, так как в статье часто употребляете именно их терминологию. Однако я не стал подобные вещи употреблять, поскольку они очень спорны:
> Thread – это виртуальный процессор
Это не процессор, если хотите это задача планировщика ОС, обеспечивать выполнение потока, создавая для него впечатление, что он выполняется на отдельном процессоре, не гарантируя при этом его выполнение в реальном времени, т.е. поток может останавливаться, прерываться и т.д… Сам по себе поток — это сущность, набор инструкций и данных, что выполняется на процессоре определенную единицу времени.
> Процесс – это в первую очередь адресное пространство.
С этим несогласен. Процессы могут быть разные по своей натуре, например процессы в Erlang. По этому процесс — это в первую очередь сущность, которая инкапсулирует потоки и все остальные вещи связанные с аппаратной защитой памяти и т.д.
Поток через контекст я не определял, остальное — ваш субъективный взгляд на потоки и процессы, однако упомяните об этом в вашей статье. Я пытался использовать общепринятую терминологию в пояснении этих вещей.
Да и потоки по своей сути могут быть очень разные. к примеру lightweight потоки реализованные в юзер левел, выполняются по сути на одном физическом процессоре, т.е. не нужно обобщать.
> При старте потока в C++ на платформе Windows через CreateThread теряется память и надо использовать _beginthreadex (Windows).
Да нечего не теряется ;) Просто _beginthreadex — это VC++ CRT функция, CreateThread — это win32 api. Первый по сути — это обертка над вторым.
> Если Вы разрабатываете многопоточное приложение, Ваши потоки, как правило, содержат код, отвечающий за передачу управления другим потокам (Sleep под Windows). Иначе 100% загрузки процессора обеспечено.
Как говорится it depends. Зависит от приложения. Даже однопоточное приложение может загрузить процессор на 100% при «должном» подходе :)
Подобные вещи специфичны для каждой ОС. Более детально — обратитесь например к самплу NDIS драйвера в WDK для интеловской сетевой, там можно поглядеть в действии WDK API касательно и DMA, MMR и тд
Получилось несколько сумбурно, в следующий раз постарайтесь не прыгать с мысли на мысль, а концентрироваться на чем-то одном ;) Добавьте пожалуйста тег «системное программирование» и неплохо было бы перенести в соответствующий блог ;)
Кстати у меня разработка драйверов ассоциируется почему-то не с Руссиновичем, а с Уолтером Оуни :) Руссинович профи — но скорее в сфере Windows Internals, и читать его полезно не начинающим, а более продвинутым.
> прикладное приложение не может просто так взять и получить доступ к памяти другого процесса
Хм, NtReadVirtualMemory/NtWriteVirtualMemory знаем? А схема — CreateRemoteThread/NtVriteVirtualMemory как самый распространённый способ инжекта кода в юзер мод процессы? так что может :)
> прикладное приложение всегда можно прервать и дать немного процессорного времени другому приложению
В Ядре kernel preemption тоже никто не отменял ;)
> и конечно маркировка на нем будет своя, т.е процессор будет называться, ну например Apple iARM 2K
ARM процессоры, что стоят в iPhone/iPod уже перемаркированы :)
> Т.е. 13 лет назад DEC StrongArm можно сказать был революционной разработкой превзошедший всех конкурентов по производительности в 2 – 4 раза.
Ну не измеряйте производительность процессоров, разной архитектуры, тактовой частотой!
> Так и в следующем 2009 году команда Apple по разработке нового CPU теоретически может сделать революцию представив, например 2-х ядерный процессор с частотой 2 — 3 ГГц основанный на архитектуре ARM!
На данный момент, такая частота кажется совсем не достижимой для ARM архитектуры. Я уже не говорю о том, что Power Efficient сам звезд с неба по поводу тактовой частоты не хватал :)
> Почему нельзя использовать для коммуникатора Apple iDynabook чипы от Intel? В принципе можно, но для компактного блокнотного устройства которое похоже на Dynabook Алана Кейя, наверно может подойти только CPU Intel Atom, а он известен своей не торопливостью по сравнению с обычными ноутбуками.
А как же новый форм фактор применяемый в Montevina и MacBook AIR? Еще и в Ultra Lov Voltage версии?
> И это будет означать постепенный закат эры обычных Персональных компьютеров как Apple Macintosh с операционной системой Apple MacOS X, так и PC под MS Windows.
И тут остапа понесло… (с)
Во-первых P.A.Semi сделали процессор, который по производительности еле еле дотягивает до младшей модели Core 2 Duo, во-вторых сама по себе ARM по производительности звезд с неба не хватает. Энерго-эффективность — да, но это другая история.
Я конечно тоже думаю, что тенденция сводится к тому, что рынок ПК вымирает сам по себе. Ибо то, что на нем творится сейчас — это кризис, элементарный кризис. На nVidia в суд подают собственные акционеры, акции падают. AMD погрязло в долгах и на пути к полной реструктуризации, и возможно делению на несколько частей. Современные видеокарты — это огромные монстры, по 20-30 см в длину, к которым нужен блок питания в 600 ватт, а их урезанные собраться не в состоянии нормально тянуть игру с которыми справляются консоли. Процветают лишь Intel и мелкие вендоры типа Broadcom, Atheros, которые очень любят зарабатывать и на рынке мобильных устройств в том числе. Да, для игр будут консоли, потому как сотни тысяч конфигураций железа поддерживать производителям софта — очень накладно. Офисные пакеты, пакеты обработки графики уйдут в интернет. ПК останется лишь как платформа для разработки, а также как инструмент профессионалов (Corel, Photoshop, пакеты обработки 3-ех мерной графики и т.д.). По сути текущий ПК трансформируется в компактное устройство, которое будет проигрывать HDTV видео и иметь доступ в интернет. Однако для полной замены — еще ох как далеко. По этому если мы и увидим от Apple подобный девайс, то функционал у него будет явно по-проще :)
Кстати неплохая идея. Ввести показатель хабросмелость, которая будет показывать насколько человек устойчив к всякого рода катаклизмам на хабре, как вот сегодняшний мини-бунт. И повышать не просто троллям всяким, а бунтарям :) Ну чтобы совсем не отходить от канонов традиционного общества.
И все равно неприятно. Пост-то, первоначальный, был очень даже с актуальной статье. Забанили человека, который занимает первое место в рейтинге. Забанят еще с десяток первых, кто будет протестовать. Что это значит? Да то, что администрации глубоко наплевать на индивидуальности. Им нужны хосты, посещения, но не интересный материал. Также нарушается принцип демократической свободы веб 2,0, ну куда это годиться?
Одно дело, не помогать, другое дело — препятствовать. Без AppStore вы свою программу можете установить, только на взломанный телефон/iPod, что уже делает бесмысленной ее распространение.
Ладно бы этот случай, но вот то, что Apple запретили NetShare, которая позволяла использовать iPhone в качестве модема — наталкивает на неприятные мысли.
О чем вы батенька?
Я понимаю следующее:
— Юмор;
— Сарказм;
— Сатира;
— Ирония;
— Стеб в конце концов.
А вот то, что вы написали, это:
— Оскорбления;
— Лож. И лож не всмысле о геях, а о:
3, 4, 5, 6, 7
Из остальных пунктов, только один частично подпадает под категорию стеба. Получается вы пришли на тематический ресурс, оскорбили наверное 60% его обитателей, и хотите чтобы вам еще пожали руку и поблагодарили за юмор? Это не тот ресурс, где так поступят. Люди, далекие от IT, очень далекие, возможно и оценят ваш креатив.
Это очень спорный вопрос. Я читал и сам считаю, что аппаратное прерывание — это IRQ, которое пришло от какого-нибудь девайса, APIC контроллера. int3 — программное, во-первых потому что isr хендл на него не повесить. Также посмотрите в исходники той же Mac OS X. Там int3 обслуживает тот же trap хендлер, который обслуживает остальные инструкции, как-то вызов rdmsr или in/out из юзермодного кода, все идет в один и тот же kernel_trap.
Еще один момент, если не ошибаюсь, то отладчик VC++ при срабатывании брейкпоинта останавливает только один поток, в котором он сработал, все остальные потоки продолжают выполнятся. Также при пошаговом исполнении вы можете быть переброшены на другой брекпоинт, который сработал в другом потоке. В gdb останавливаются все потоки.
Вообще дебагер — расслабляет. Им очень легко не просто отлаживать, но и помогать себе при написании. К примеру написал кусок алгоритма, запустил и посмотрел как, что и где. Поскольку я сейчас часто пишу ядерный код, то приходится часто напрягатся и выверять каждую строку кода, иначе будет «приплыли» :)
> Thread – это виртуальный процессор
Это не процессор, если хотите это задача планировщика ОС, обеспечивать выполнение потока, создавая для него впечатление, что он выполняется на отдельном процессоре, не гарантируя при этом его выполнение в реальном времени, т.е. поток может останавливаться, прерываться и т.д… Сам по себе поток — это сущность, набор инструкций и данных, что выполняется на процессоре определенную единицу времени.
> Процесс – это в первую очередь адресное пространство.
С этим несогласен. Процессы могут быть разные по своей натуре, например процессы в Erlang. По этому процесс — это в первую очередь сущность, которая инкапсулирует потоки и все остальные вещи связанные с аппаратной защитой памяти и т.д.
Поток через контекст я не определял, остальное — ваш субъективный взгляд на потоки и процессы, однако упомяните об этом в вашей статье. Я пытался использовать общепринятую терминологию в пояснении этих вещей.
Да и потоки по своей сути могут быть очень разные. к примеру lightweight потоки реализованные в юзер левел, выполняются по сути на одном физическом процессоре, т.е. не нужно обобщать.
Да нечего не теряется ;) Просто _beginthreadex — это VC++ CRT функция, CreateThread — это win32 api. Первый по сути — это обертка над вторым.
> Если Вы разрабатываете многопоточное приложение, Ваши потоки, как правило, содержат код, отвечающий за передачу управления другим потокам (Sleep под Windows). Иначе 100% загрузки процессора обеспечено.
Как говорится it depends. Зависит от приложения. Даже однопоточное приложение может загрузить процессор на 100% при «должном» подходе :)
С остальным согласен.
Хорошая идея, последние изменение заметны невооруженным взглядом. Масса статей выходит на главную.
Кстати у меня разработка драйверов ассоциируется почему-то не с Руссиновичем, а с Уолтером Оуни :) Руссинович профи — но скорее в сфере Windows Internals, и читать его полезно не начинающим, а более продвинутым.
> прикладное приложение не может просто так взять и получить доступ к памяти другого процесса
Хм, NtReadVirtualMemory/NtWriteVirtualMemory знаем? А схема — CreateRemoteThread/NtVriteVirtualMemory как самый распространённый способ инжекта кода в юзер мод процессы? так что может :)
> прикладное приложение всегда можно прервать и дать немного процессорного времени другому приложению
В Ядре kernel preemption тоже никто не отменял ;)
> и конечно маркировка на нем будет своя, т.е процессор будет называться, ну например Apple iARM 2K
ARM процессоры, что стоят в iPhone/iPod уже перемаркированы :)
> Т.е. 13 лет назад DEC StrongArm можно сказать был революционной разработкой превзошедший всех конкурентов по производительности в 2 – 4 раза.
Ну не измеряйте производительность процессоров, разной архитектуры, тактовой частотой!
> Так и в следующем 2009 году команда Apple по разработке нового CPU теоретически может сделать революцию представив, например 2-х ядерный процессор с частотой 2 — 3 ГГц основанный на архитектуре ARM!
На данный момент, такая частота кажется совсем не достижимой для ARM архитектуры. Я уже не говорю о том, что Power Efficient сам звезд с неба по поводу тактовой частоты не хватал :)
> Почему нельзя использовать для коммуникатора Apple iDynabook чипы от Intel? В принципе можно, но для компактного блокнотного устройства которое похоже на Dynabook Алана Кейя, наверно может подойти только CPU Intel Atom, а он известен своей не торопливостью по сравнению с обычными ноутбуками.
А как же новый форм фактор применяемый в Montevina и MacBook AIR? Еще и в Ultra Lov Voltage версии?
> И это будет означать постепенный закат эры обычных Персональных компьютеров как Apple Macintosh с операционной системой Apple MacOS X, так и PC под MS Windows.
И тут остапа понесло… (с)
Во-первых P.A.Semi сделали процессор, который по производительности еле еле дотягивает до младшей модели Core 2 Duo, во-вторых сама по себе ARM по производительности звезд с неба не хватает. Энерго-эффективность — да, но это другая история.
Я конечно тоже думаю, что тенденция сводится к тому, что рынок ПК вымирает сам по себе. Ибо то, что на нем творится сейчас — это кризис, элементарный кризис. На nVidia в суд подают собственные акционеры, акции падают. AMD погрязло в долгах и на пути к полной реструктуризации, и возможно делению на несколько частей. Современные видеокарты — это огромные монстры, по 20-30 см в длину, к которым нужен блок питания в 600 ватт, а их урезанные собраться не в состоянии нормально тянуть игру с которыми справляются консоли. Процветают лишь Intel и мелкие вендоры типа Broadcom, Atheros, которые очень любят зарабатывать и на рынке мобильных устройств в том числе. Да, для игр будут консоли, потому как сотни тысяч конфигураций железа поддерживать производителям софта — очень накладно. Офисные пакеты, пакеты обработки графики уйдут в интернет. ПК останется лишь как платформа для разработки, а также как инструмент профессионалов (Corel, Photoshop, пакеты обработки 3-ех мерной графики и т.д.). По сути текущий ПК трансформируется в компактное устройство, которое будет проигрывать HDTV видео и иметь доступ в интернет. Однако для полной замены — еще ох как далеко. По этому если мы и увидим от Apple подобный девайс, то функционал у него будет явно по-проще :)
Ладно бы этот случай, но вот то, что Apple запретили NetShare, которая позволяла использовать iPhone в качестве модема — наталкивает на неприятные мысли.
Я понимаю следующее:
— Юмор;
— Сарказм;
— Сатира;
— Ирония;
— Стеб в конце концов.
А вот то, что вы написали, это:
— Оскорбления;
— Лож. И лож не всмысле о геях, а о:
3, 4, 5, 6, 7
Из остальных пунктов, только один частично подпадает под категорию стеба. Получается вы пришли на тематический ресурс, оскорбили наверное 60% его обитателей, и хотите чтобы вам еще пожали руку и поблагодарили за юмор? Это не тот ресурс, где так поступят. Люди, далекие от IT, очень далекие, возможно и оценят ваш креатив.
Протестируй функционал, добавь еще один воркараунд, сертифицируй-ка драйвер, и прочая чушь. И вот тут-то хабр и подкрадывается.
Еще один момент, если не ошибаюсь, то отладчик VC++ при срабатывании брейкпоинта останавливает только один поток, в котором он сработал, все остальные потоки продолжают выполнятся. Также при пошаговом исполнении вы можете быть переброшены на другой брекпоинт, который сработал в другом потоке. В gdb останавливаются все потоки.
Вообще дебагер — расслабляет. Им очень легко не просто отлаживать, но и помогать себе при написании. К примеру написал кусок алгоритма, запустил и посмотрел как, что и где. Поскольку я сейчас часто пишу ядерный код, то приходится часто напрягатся и выверять каждую строку кода, иначе будет «приплыли» :)