쓰레드.. ? 프로세스..?
글쓴이: leilei / 작성시간: 월, 2004/02/23 - 2:27오후
불행인지 다행인지 언제나 프로젝트 시작부터 참가하게 되고..
허접 주제에 서버를 디자인을 하게 되는군요.. -_-;;
결국 프로젝이 마칠 때 쯤이면 누가 이거 설계했어란 말이나 듣구.. T^T
그러면서 항상 고민되는건... 싱글 프로세스 정도로 감당이 되면 좋겠지만..
아닌 경우.. 멀티 프로세스로 할건지 쓰레드로 할건지 고민스러워지네요..
두 모델이 모가 다른지 무슨 장단점이 있느지 알면서도..
걍 유지보수 쉽고.. 생각하기 쉽다라는 점에서 - 전적으로 제 생각.. - 덜컥 프로세스쪽으로 가긴 하지만서두.. - 그리고.. 거의 다 쓰레드의 장점을 살릴만한 서버들이 아니기에.. ^^;
왠지 쓰레드를 써야만 멋쩌 보인다는.. :oops:
다들 어떠신가요? 거의 모든 서버들을 pre-fork와 select로 처리하는
저로써는 어떤 멋쮠~ 서버들을 만들고 계신지 궁금하네요.. ㅋㅋ
Forums:
리눅스에서의 thread는 process와 차이가 없다고 알고있습
리눅스에서의 thread는 process와 차이가 없다고 알고
있습니다. 단지 차이점이라고는 '이름'뿐이 아닐지...
아, bugiii 님께서 열심히 전파하고 계신 'GNU pth'를
사용해보시는 것도 좋을 듯 합니다.
What a Cool Days!!!
하드코어 프로그래밍을 좋아하신다면 비동기형 마이크로쓰레드 모델도 좋습니다
하드코어 프로그래밍을 좋아하신다면 비동기형 마이크로쓰레드 모델도 좋습니다.
쓰레드가 필요한 경우에 대부분의 경우 성능상 최고인데 순수비동기에 비해 가독성이나 편의성도 훨씬 좋습니다.
C에서는 Statethreads
Python에서는 Stackless Python
Lua에서는 그냥 Lua 5.0을 쓰면 쉽게 할 수 있습니다.
You need Python
[quote="indizarm"]리눅스에서의 thread는 process
google 에서 nptl 을 검색해보시기 바랍니다 :D
레댓에서는 2.4에 nptl을 백포트하기까지 했죠 :)
커널 2.6 과 최신버젼의 glibc들에선..nptl을 지원합니다 :)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
[quote="indizarm"]리눅스에서의 thread는 process
차이가 있습니다 --;;
프로세스를 만드는 대신 쓰레드를 만드는 이유를 생각해볼 때,
생성, 파괴가 빠르다.
메모리 공간을 공유하므로 동기화, 공유메모리 사용이 편하다.
이 두가지라면, nptl까지 생각하지 않더라고 linuxthread로서도 충분히 thread의 이점이 있습니다.
어떤 면에서 thread와 process가 같다고 생각하시는건지....
음야...
저도 들은 얘기지만, 금융쪽 서버 프로그램에선 거의 쓰레드를
안쓴다고 하더군요. 오직 fork()~~!
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
[quote]차이가 있습니다 --;; 프로세스를 만드는 대
지금의 리눅스는 모르겠지만 옛날 리눅스의 쓰레드는 프로세스로 구현되었다고 알고 있습니다. (쓰레드의 특성은 가지지만 프로세스보다 자원을 덜 먹지는 않는다는 요지 같습니다.)
[quote="bugiii"][quote]차이가 있습니다 --;;
님께서 말씀하신 쓰레드의 특성을 가지기 위해서
clone으로 생성 될때 부모에 할당된 여러 자원들을 공유 합니다.
고로 자원을 덜 먹지요.
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
Re: 음야...
이상하네요.. 많이들 쓰고 있습니다...
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
프로세스보다 자원을 덜 먹지는 않는다 -> 틀린 말이었습니다. :
프로세스보다 자원을 덜 먹지는 않는다 -> 틀린 말이었습니다. :oops:
커널이나 사용자 라이브러리 레벨에서의 쓰레드가 native하게 지원되는 경우보다는 못하다라고 생각했었습니다. 특히 같은 프로세스 내의 쓰레드가 같은 메모리를 공유한다는 것을 프로세스의 공유 메모리처럼 구현했다고 알고 있는데, 이런 것들이 조금은 리눅스가 쓰레드 지원을 진짜 제대로 지원하지 못하고 있다고 알고 있었습니다.
현재의 리눅스는 다른 OS의 쓰레드 지원과 비교했을 때 어느정도인지 궁금합니다. 그리고, 틀린 점이나 잘못 알고 있는 것이 있다면 다시 지적 부탁드립니다.
p.s. 님이라는 단어는 좀... :cry:
[quote="bugiii"]프로세스보다 자원을 덜 먹지는 않는다 -&g
흔이들 쓰는 "님아"는 반말이지만 저는 "님께서"는 존칭인데 어색하시나요?
저는 리눅스의 쓰레드 구현 방식이 프로세스처럼 보이는 것이 "못한 구조가" 아니라 변경을 최소화 하면서 쓰레드를 지원하는 합리적인 방법이라고 생각합니다.
그리고, 공유메모리의 구현을 살펴 보면 결국 커널이 이미 할당한 페이지 목록을 각 프로세스가 가지고 있는 vm맵에 등록후 공유해서 사용하는 것이고 쓰레드는 이 VM에 관련된 자료구조를 공유합니다. 그래소 각각의 쓰레드들이 주소공간을 공유 하는 것이지요.
혹, 공유메모리를 다루는 shmget를 사용해서 이루어진다고 알고 계신다면 이것은 잘못된 사실입니다.
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
아 그렇군요. 변경을 최소화해서 구현했다면, 리눅스 쓰레드의 문제점은 어
아 그렇군요. 변경을 최소화해서 구현했다면, 리눅스 쓰레드의 문제점은 어떤 것이 있을 수 있습니까?
clone으로 만들어진 리눅스 쓰레드는 생성 갯수가 프로세스가 만들어질 수 있는 갯수로 제한되지 않나요? 그리고, 리눅스 쓰레드에서 시그널을 사용하는데 문제가 있다고 하는데 어떤 것입니까? --- 리눅스에서는 해보지도 않고 줏어들은 걸로 여쭤보는 것입니다. :oops:
사용상의 주의점같은 것을 살짝 공개해주시면 정말 좋겠습니다.
p.s. 님이라는 단어를 단독으로 사용하는 것에 거부감이 있고, 글 쓸때 조금만 아래를 보면 있는 인용 id를 적는 수고는 해야 한다고 생각했기 때문입니다.
이미 2.4이후부터 생성할 수 있는 프로세스 갯수는 무제한으로 알고 있습
이미 2.4이후부터 생성할 수 있는 프로세스 갯수는 무제한으로 알고 있습니다.
다만 메모리가 뒷받침해 주어야 하지요.
Written By the Black Knight of Destruction
현재 리눅스 ( 2.6 + nptl or 2.4 + nptl ) 에서는
현재 리눅스 ( 2.6 + nptl or 2.4 + nptl ) 에서는 솔라리스 와 동급 혹은 더 이쁘게동작하는거 같습니다.
과거? ( 라기엔 보다 현재에 가까운 -_- ; ) 2.4 에서는 clone 을 이용한 thread를 지원하였는데
clone 은 fork 와 거의 같다고 보시면 됩니다 -_-;;
man clone 해보시면 -_-;
예전에 mysql 에서 php 를 이용할 경우 동시
접속 200개일경우 -_-; 200개를 연결했다가
끈었다가 -> fork 200개를 했다가 죽였다가 -_-;;
nptl 이 적용되면.. 정말 환상입니다 -_-;;
( 개인적으로는 이제 솔라리스 정도는 충분히 -_-;; 라고 봅니다. )
------------------------------------------------------------------------------------------------
Life is in 다즐링