-> 직렬이란 ?? 여러개의 물건이 일직선으로 나열되어있는것
-> 병렬이란 ?? 여러개의 물건이 두 줄 이상으로 나열되어있는것
->도로차선을 예를 들때 다차선에서 1차선으로 모이는 지점, 1차선에서 다시 다차선이 되는 지점
이 2곳에서 사고가 많이 일어나는곳 즉, 병목지점이라한다
->특정 기간내에 하나의 CPU가 처리할 수 있는 양은 정해져있는데 만약에 CPU를 여러대 배치하면 처리량이 늘어날 수 있다, 허나 이 많은 CPU가 이용할 수 있는 전제하이다, 그러니 분담해서 병렬화할 수 없는 처리는 CPU 코어를 아무리 늘려도 소용이 없다(CPU 클럭 주파수 올리거나 직렬 처리속도 올리는방법이 있긴있음) 여튼 논점은 처리특성에 따라서 병렬화할 수 있는것이 있고 없는것이 있다는 것
직렬 처리로 속도를 올리는데 한계가 있음
병령화를 통해 속도는 빨라지지않지만 단위 시간당 처리량을 늘릴 수 있음
병렬 처리에선 합류점, 직렬화 구간, 분기점이 병목지점이 되기 쉬움
병렬화할때 일을 분담해서 처리한 후 다시 집약할때 오버헤드가 걸리는데 이를 감안하더라도 효과가 있을 경우에 병렬화를 한다
***병렬화가 어디에 사용될까 ??
웹 서버엔 다수의 이용자가 접속하기에 병렬처리를 함, AP 서버에선 자바를 예시로 JVM프로세스 하나이지만 복수의 스레드가 병렬로 처리
프로세스나 스레드 수를 조정할땐 CPU 코어수도 함께 고려해야함, 계산대가 하나인데 직원이 아무리 많아봤자 소용없는것과 비슷한 맥락(CPU 코어수는 하나인데 프로세스나 스레드가 많아봤자 무용지물이란 소리), 하나의 CPU 코어밖에 없는 서버에선 프로세스나 스레드를 아무리 늘려도 동시에 실행할 수 있는것은 1 프로세스 뿐
장점: 구조가 간단해서 설계나 구현 난이도가 낮음
단점: 복수의 리소스를 유용하게 이용할 수 없음**
장점: 복수의 리소스를 유용하게 사용가능, 직렬에 비해 동일 시간당 처리양이 증가, 일부가 고장나도 처리를 계속 할 수 있음
단점: 처리 분기나 합류를 위한 오버헤드 발생, 구조가 복잡해서 설계나 구현난이도가 높음**