2014. 1. 2. 23:48

Vector와 ArrayList 의 공통점

순서가 있는 Collection 이다.

데이터를 중복해서 포함할 수 있다.

List 인터페이스를 구현하고 있다.


Vector와 ArrayList 의 차이점 동기화 여부 차이 입니다.

Vector  : 자동으로 동기화를 보장 해준다.  (안전성이 좋다)

ArrayList : 멀티스레드를 이용할때 동기화를 보장해주지 않는다.  (Vector 보다 속도 빠름)


ArrayList 동기화 지원 방법

List list = Collection.synchronizedList(new ArrayList());

동기,비동기 관련 포스트 보러 가기 click click !



도움되는 글 

-질문-

채팅 서버 만들고 있는데...(동접 1000명 정도 생각중) 

vector를 쓰는게 나은가요 아니면 arraylist 동기화해서 쓰는게 나은가요?

vector가 옛날꺼지만 동기화때문에 쓰려고 하는데..(채팅서버 특성상 멀티스레드 돌리거든요)

속도도 느리고 여러모로 구형이라......

arraylist동기화 하려니 만약 동기화해서 속도가 느려지면 그밥에 그나물 이라는 생각도 들고...

아니면 vector시대에 비해 컴속도도 빨라졌고 자바도 발전했으니 

그냥 arraylist동기화 하는게 여러모로 더나은지..

그것도 아님 동기화시에 유리한 다른 벡터계열의 함수가 있는지요..

java는 1.5버전으로 하고 있습니다.

 

 

-답변-

어차피 Vector 나 ArrayList나 Serializable(직렬 선형구조(인덱스를 참조하는..))한 자료형이므로

색인 속도는 비슷하지 않을까 싶어요..

그리고 일정 수준이상 하드웨어면은 개미털만큼에 속도차이밖에 안날듯 싶네요..

더군다다 1000명정도 동접할 채팅서버면 따로 서버장비를 둘 필요없을 정도로 소규모니까

리소스때문에 뻣거나 할일은 거~~의 없을듯 싶습니다..

(네트워크가 받쳐주고 프로그램을 재대로 짰다고 가정하에...)

 

프로그램 즉 코딩하는 측면에 생각해 보면 List가 Vector 보단 쓰기 편하겠지요

Vector는 초기화에 사이즈를 주어야 하기 때문에 첨부터 메모리에 maximum 사이즈를

올려야 하고 만약 최대사이즈 이상일 경우에 동작하는 Exception 처리도 따라오겠네요..

List는 동적할당이므로 최대사이즈 없이 노드를 생성하여 붙이니까 클라이언트가

붙는만큼 메모리에 적재시킬 수 있으니까 자원관리측면에서 이득이지 않을까 싶네요

또한 노드를 릴리즈 시키면 자동으로 메모리 반환도 가능하구요

 

 

서버를 어떻게 구성할지는 모르겠지만 Request/Response 를 어떻게 구성할지도 생각해 봐야겠네요 

동기식으로 할지 비동기식으로 할지....

동기 비동기에 따라서 서버구성도 다르게 구성되야겠고 Thread를 최대 몇개까지 어떻게

쓸껀지도 속도에 큰 요인이 되겠네요..

아무래도 Thread를 많이 붙이면 클라이언트와 거의 동기식 처리가 가능하겠지만

그만큼 자원할당이나 메모리관리 등이 복잡해질 우려가 있으니 잘 고민하시기 바랍니다.

비동기식이면 단순하게 스케쥴 관리를 위한 큐와 Send-Reciver 쓰레드로도 구성할 수 있겠네요..


Posted by hoonihoon