https://www.maeil-mail.kr/question/84
요약: 컴퓨터에서 프로그램이 돌아갈 때, 스레드,프로세스,코어를 이용해서 돌아간다. 프로그램을 처리할 때의 비유로, 코어는 머리, 스레드는 팔, 프로세스는 처리해야할 일을 메모리에 올려놓을 상태를 의미한다. 그러나 코어,스레드,프로세스가 많다고 무조건 좋은 것이 아니다. 설계에 맞지 않은 코어,스레드,프로세스의 갯수는 오버헤드,데드락,시스템 장애등의 트러블을 만들 수 있다.
출처: https://velog.io/@hkh1213/%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%94%A9%EC%9D%98-%EC%9E%A5%EC%A0%90-%EB%8B%A8%EC%A0%90
내가 이해한 스레드는 한 번에 작업을 처리할 수 있는 작업의 단위이다.
우리는 흔히 프로그램을 메모리에 올려서 프로세스로 만들고 이를 여러 스레드를 이용해서 처리한다.
멀티 스레드를 사용하면, 동시에 여러 일을 할 수 잇어서 작업의 효율성을 올릴 수 있으나, 너무 많은 스레드를 사용하면, 데드락, 잦은 컨텍스트 스위칭 때문에 오버헤드가 발생할 수 있다. 또한 동기화와 관련해서 관리가 어려워질 수 있다.
공유자원을 접근하는 멀티 스레딩작업은 데이터 무결성의 위협이 있으므로, 특히나 더욱 주의할 필요가 있다.
출처: https://velog.io/@gparkkii/ProgramProcessThread
프로세스는 프로그램을 메모리에 올린 상태로 프로그램이 정적인 상태라면, 프로세스는 동적인 상태이다.
쓰레드는 독자적인 스택 메모리를 활용해서 프로세스를 수행하다.
즉 멀티스레드환경에서 코드,데이
터,힙은 공유하며, 각 쓰레드는 스택만을 독자적으로 사용한다.
너무 많은 프로세스를 사용하면 메모리의 공간이 부족해질 수 밖에 없을 것이다. 그리고, 프로세스의 간의 스위칭은 스레드단위의 컨텍스트 스위칭에 비해서 비용이 많이 든다.
따라서 OS는 동시에 실행할 수 있는 프로세스의 갯수를 제한한다.
멀티 코어를 이용해서 병렬적으로 cpu가 해당 프로세스를 처리 할 수 있어서, 성능이 좋게 만들 수 있다. 그러나 멀티 코어를 사용하기 위한 소프트웨어 최적화가 필수이면, 만약 우리가 사용하려는 프로세스가 단일 스레드만 지원한다면 멀티 코어로 처리 할 수 있는 cpu는 굳이 필요 없을 것이다.
어떤 cpu를 사용할지는 사용자가 사용할 프로그램과 현재 컴퓨터의 소프트웨어 환경을 보고 결정하는것이 바람직하다.