Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Религиозные войны > Processes vs Threads


Автор: Sun 23.12.2006, 22:34
Возник тут у нас спор с VectorMan по поводу сабжа 
Цитата(VectorMan @  23.12.2006,  17:55 Найти цитируемый пост)
Просто в nix единица выполнения - процесс,
а в win  - поток, процесс - это просто группа потоков.

какая разница как это называть? суть одна  smile 


Есть ли разница?

Автор: VectorMan 23.12.2006, 22:43
Заметил неточность в своих словах: "процесс - это просто группа потоков" относилось именно к Винде

Многозадачные ОС переключают процессор с одной задачи на другую (типа preemptive multitasking)
но в win такие задачи называются потоками, а в nix - процессами.

Цитата(Sun)

Суть разная. Процесс - это не группа потоков. Это отдельная сущность. Архитектурная организация у них разная, способы взаимодействи и уровни изоляции.


что касается того, что от чего и как изолированно - это уже часности, разделять страницы памяти можно и между процессами, не говоря уж про наследование дескрипторов/хэндлов (в nix - это по дефолту, в win - один из параметров функции CreateProcess)

Автор: Gregorian 23.12.2006, 23:17
Потоки существуют в контексте процесса, имеют в нем своё адресное пространство и смежное пространство общих данных. Плюс к этому в unix процессы могут передавать информацию через каналы (не путать с сокетами). Под многопоточность в unix понимают клонирование процессов, что занимает больше памяти.

Автор: SparF 24.12.2006, 01:04
Цитата(Gregorian @  23.12.2006,  23:17 Найти цитируемый пост)
Под многопоточность в unix понимают клонирование процессов, что занимает больше памяти.

чего бы это вдруг????

http://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C

Другой вопрос в том, что в том же Linux достаточно интересная реализация потоков: поток представляет собой просто специальный тип процесса. Просто эти процессы делят между собой некоторые ресурсы. К примеру память у них - общая. В отличии от Linux той же винде, солярисе, к примеру, есть явные средства поддержки потоков.

Добавлено @ 01:16 
Вообще сам сабж странный.  Несколько неразумно спорить по поводу "Processes vs Threads" - одно ли это, или абс разные понятия. Если взять теорию операционных систем - то несомненно понятия разные, а вот если смотреть на реализацию, то где-то (Linux) разница не так заметна. Что же касается того, как работает планировщик при распределении процессорного времени, то сколько материалов не читал по данной теме  - везде процессорные ресурсы делились между потоками, а не между процессами и это логично.

Автор: Dude03 24.12.2006, 02:22
Цитата(Gregorian @  23.12.2006,  23:17 Найти цитируемый пост)
 Плюс к этому в unix процессы могут передавать информацию через каналы (не путать с сокетами)

А в винде что нету пайпов? MSDN -> CreatePipe и дальше все остальные функции полезут smile (нравится мне этот смайл) 

Автор: MAKCim 24.12.2006, 11:32
Цитата

Потоки существуют в контексте процесса, имеют в нем своё адресное пространство и смежное пространство общих данных. 

linuxthread создается через сlone()
linuxthread - процесс, который делит с родителем: VM (CLONE_VM), FS (CLONE_FS), FILES (CLONE_FILES), SIGHAND (CLONE_SIGHAND)
т. е адресное пространство у них общее
Цитата

клонирование процессов, что занимает больше памяти. 

слышал про COW (Copy On Write)?

Автор: Hidrag 24.12.2006, 23:18
Это что получается, если я на Java напишу многопоточное приложение оно на разных платформах поразному работать будет?

Автор: Sun 24.12.2006, 23:53
Цитата(Hidrag @  24.12.2006,  20:18 Найти цитируемый пост)
Это что получается, если я на Java напишу многопоточное приложение оно на разных платформах поразному работать будет?

Работать оно будет одинаково с точки зрения пользователя, но в разных ОС оно конечно будет выполняться по-разному, с точки зрения системных  процессов. В Linux и Windows многопоточное приложение будет жить в одном процессе, тогда как на FreeBSD это будет несколько процессов.

Автор: Hidrag 25.12.2006, 00:30
Хм... а косяков не возникнет на фряхе с тем что в программе эти потоки используют общие ресурсы, переменные, рисуют в ГУИ?

Автор: Sun 25.12.2006, 10:15
Цитата(Hidrag @ 24.12.2006,  21:30)
Хм... а косяков не возникнет на фряхе с тем что в программе эти потоки используют общие ресурсы, переменные, рисуют в ГУИ?

Ну строго говоря фряха не сертифицирована для работы с Java. Последняя версия которая была сертифицирована, если не ошибаюсь - Java 1.3. Все остальные джавы - это просто порт с Linux. Коллизии конечно возникают, не без этого. Но вроде как-то там джава живёт.

Ещё инетерсно что в этом плане с MacOS. Она ведь построена на ядре фряхи. Правда они перепилили там всё вдоль и поперек. По крайней мере джава, судя по слухам, работает лучше чем в винде  smile 

Автор: MAKCim 25.12.2006, 10:46
Цитата

В Linux многопоточное приложение будет жить в одном процессе

смотря что используем: Linuxthreads или NPTL

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)