| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Религиозные войны > Processes vs Threads |
| Автор: VectorMan 23.12.2006, 22:43 | ||
| Заметил неточность в своих словах: "процесс - это просто группа потоков" относилось именно к Винде Многозадачные ОС переключают процессор с одной задачи на другую (типа preemptive multitasking) но в win такие задачи называются потоками, а в nix - процессами.
что касается того, что от чего и как изолированно - это уже часности, разделять страницы памяти можно и между процессами, не говоря уж про наследование дескрипторов/хэндлов (в nix - это по дефолту, в win - один из параметров функции CreateProcess) |
| Автор: Gregorian 23.12.2006, 23:17 |
| Потоки существуют в контексте процесса, имеют в нем своё адресное пространство и смежное пространство общих данных. Плюс к этому в unix процессы могут передавать информацию через каналы (не путать с сокетами). Под многопоточность в unix понимают клонирование процессов, что занимает больше памяти. |
| Автор: SparF 24.12.2006, 01:04 | ||
чего бы это вдруг???? 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 | ||
А в винде что нету пайпов? MSDN -> CreatePipe и дальше все остальные функции полезут |
| Автор: 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 | ||
Работать оно будет одинаково с точки зрения пользователя, но в разных ОС оно конечно будет выполняться по-разному, с точки зрения системных процессов. В Linux и Windows многопоточное приложение будет жить в одном процессе, тогда как на FreeBSD это будет несколько процессов. |
| Автор: Hidrag 25.12.2006, 00:30 |
| Хм... а косяков не возникнет на фряхе с тем что в программе эти потоки используют общие ресурсы, переменные, рисуют в ГУИ? |
| Автор: Sun 25.12.2006, 10:15 | ||
Ну строго говоря фряха не сертифицирована для работы с Java. Последняя версия которая была сертифицирована, если не ошибаюсь - Java 1.3. Все остальные джавы - это просто порт с Linux. Коллизии конечно возникают, не без этого. Но вроде как-то там джава живёт. Ещё инетерсно что в этом плане с MacOS. Она ведь построена на ядре фряхи. Правда они перепилили там всё вдоль и поперек. По крайней мере джава, судя по слухам, работает лучше чем в винде |
| Автор: MAKCim 25.12.2006, 10:46 | ||
смотря что используем: Linuxthreads или NPTL |