팩토리오에서 CPU가 중요한 이유는 엔티티 업데이트,
즉 물건생산, 벨트이동, 로봇이동, 유체이동 등의 연산 때문임
근데 이건 멀티쓰레드로 나눌 수가 없는 게
멀티쓰레드로 나누려면 나누고자 하는 연산들이 상호 독립적이어야 함
그런데 한 틱동안 철판이 벨트를 따라 이동하고 투입기가 집는다거나
한 틱동안 시추기에서 원유가 나오고 파이프를 따라 원유공장으로 들어가서 생산까지 한다거나
이런 연산들을 고려하면 그 어떤 연산도 독립적이라고 장담할 수가 없음
그래서 공장 전체의 엔티티 업데이트는 하나의 쓰레드에서 처리해야만 함
이거 관련해서 FFF 쓴게 있을건데 몇번인지 잘 기억이 안나네...
참고로 팩토리시모 모드와 같이 독립된 공간에 공장을 짓는 경우 바깥공장과 내부공장의 엔티티 업데이트를 서로 다른 쓰레드에서 하게 할 수도 있는데 실제로 멀티쓰레딩을 하는지는 모르겠음
여담으로 이와 같은 이유로 시티즈 스카이라인이나 플래닛 코스터, 스타2 등의 게임들이 멀티쓰레딩을 못함
심시티(2013)가 최대 도시 크기를 콩알만하게 제한한 것도 엔티티 업데이트가 너무 느려서였음
즉 물건생산, 벨트이동, 로봇이동, 유체이동 등의 연산 때문임
근데 이건 멀티쓰레드로 나눌 수가 없는 게
멀티쓰레드로 나누려면 나누고자 하는 연산들이 상호 독립적이어야 함
그런데 한 틱동안 철판이 벨트를 따라 이동하고 투입기가 집는다거나
한 틱동안 시추기에서 원유가 나오고 파이프를 따라 원유공장으로 들어가서 생산까지 한다거나
이런 연산들을 고려하면 그 어떤 연산도 독립적이라고 장담할 수가 없음
그래서 공장 전체의 엔티티 업데이트는 하나의 쓰레드에서 처리해야만 함
이거 관련해서 FFF 쓴게 있을건데 몇번인지 잘 기억이 안나네...
참고로 팩토리시모 모드와 같이 독립된 공간에 공장을 짓는 경우 바깥공장과 내부공장의 엔티티 업데이트를 서로 다른 쓰레드에서 하게 할 수도 있는데 실제로 멀티쓰레딩을 하는지는 모르겠음
여담으로 이와 같은 이유로 시티즈 스카이라인이나 플래닛 코스터, 스타2 등의 게임들이 멀티쓰레딩을 못함
심시티(2013)가 최대 도시 크기를 콩알만하게 제한한 것도 엔티티 업데이트가 너무 느려서였음
정보글추
정보)분배기는 다른코어 갈군다
정보추
연산들이 독립적이라 병렬로 배치가능하면 멀티스레드로 나누면 좋은데 입력이랑 출력이 맞물려 있어서 직렬로 배치해야하면 맞물리는 부분마다 락을 걸어야하고 그곳에서 기다리느라 성능을 낮춰서 멀티스레드로 나누는 이점을 다 까먹음
반면 독립된 공간이 있으면 독립된공간안과 밖에서 입력과 출력이 맞물리는 부분이 적어지고 스레드를 나누는 기준이 명확해져서 멀티스레드로 만들기 좋긴함
그리고 독립된 공간 사이마다 버퍼가 충분히있어서 스레드를 올리고 내리는 작업을 줄이면 더좋고
벨트로 연결된 부분끼리 묶어서 연산하고 기차-기차로 연결된 부분은 서로 다른 스레드로 처리 못함? 전력때문에 불가능한가?
이야 이걸 반년후에 개발자가 머리를 존나 굴려서 해결했네