MsgSendvs, MsgSendsv ->structure로 보내고 vector로 받기 vector로 보내고 structure로 받기 이런식.
server side도 MsgReceviev() 도 있다.
받는쪽에서 쪼개서 받는거, MsgSendv와는 독립적으로 동작한다.
사이즈를 모를때 전송하는법
정해진 header를 먼저 msgsend로 보내고 msgreceive로 데이터를 읽어오고 그다음에 정해진 client에게만 data를 읽어와야한다 만약 msgreceive를 하게되면 다른 client를 연결될수도 있어서 문제가 있는데 이럴때 정해진 client에게 헤더가 알려준 길이만 큼 받아게 msgread를 쓰면된다 이걸쓰면 원하는 rcvid에게만 read해 오기 때문에 한명의 client에게만 read하게 되는것이다.
client에게 분할 write하는방법
msgwrite는 client에게 메세지를 전달할때 분할write할수있다. offset을 주고 원하는 주소에 원하는 size로 write할수있다.
write한다고 바로 client에게 보내지지 않는다. 실제 전달은 MsgReply를 사용해야지만 날라가게된다.
위두개를 조합하여 여러 데이터를 받을수있다.
client는 MsgSendv를 이용하여 데이터 iov_t으로 조각데이터를 보내고 보낼때 첫 데이터는 header만을 규약을 맞춰서 나머지 데이터 정보를 담아준다.
server는 MsgReceive로 header만 일단 받고 header정보를나머지 다른조각들은 MsgRead를 통해서 남은조각들을 받아오면 무리없이 데이터를 receive할수있다.
우선순위는 어떻게 쓸까??
같은 server에 여러 client가 붙어 있을때는 어떻게 사용할까?
server는 MsgReceive를 하게될때 client의 priority를 확인하여 제일 높은 놈의 MsgReceive를 하게된다.
priority가 같게되면 server는 먼저 들어온놈을 실행하게된다.
client들이 겁나게 메세지를 여러개 보냈을때 server가 아직 receive하지 않은 상황이다 이러다가 receive start하게되면 client에서 보내주는 메세지의 우선순위에 따라 처리하게 됩니다.
우선순위 낮은데 실행되는 역전현상
server는 우선순위가 높고 client 우선순위가 낮은데 그때 중간에 다른 thread가 server보다 낮고 client가 높은 경우 server 우선순위를 client 레벨로 낮춰서 다른 thread를 돌도록 해준다. 이건 옵션으로 조정된다. 따라움직이게하던가 고정되게 하던가.
reply는 아무때나 가능하다.
server가 여러 thread의 receive를 받고나서 reply는 아무때나 해줘도 된다 먼저온다고 먼저 줄필요는없다.
client 에도 channel을 만들수 있다. 양쪽다 server가 될수 있다.
이런 투채널이 열려있을때는 둘다 client도 되고 server도 될수 있다. 이럴때 잘못하게되면 MsgSend를 둘다 걸어놓고 기다릴수도있다 이러면 DEADLOCK이 된다 둘다 SENDBLOCK상태에서 보내줄께 기다려 상황이 된다.
-이럴때는 pulse를 이용해서 할수 있다. server가 보내줄께 있으면 pulse를 보내는것이다.
Multi-Part Messages
멀티 파트 메세지는 뭔가?
MsgSendv()로 여러개를 보낸다.
MsgSendv 변셩
server side도 MsgReceviev() 도 있다.
사이즈를 모를때 전송하는법
client에게 분할 write하는방법
위두개를 조합하여 여러 데이터를 받을수있다.
우선순위는 어떻게 쓸까??
우선순위 낮은데 실행되는 역전현상
reply는 아무때나 가능하다.
client 에도 channel을 만들수 있다. 양쪽다 server가 될수 있다.