전체 글
-
🚦 동기(Synchronous) 프로그래밍과 🏎️ 비동기(Asynchronous) 프로그래밍의 차이점개발 TIP/기타 2023. 2. 26. 19:56
작업의 실행 방식에 따라 동기 프로그래밍과 비동기 프로그래밍은 다릅니다.🚦 동기 프로그래밍의 장단점장점코드가 순차적으로 실행되기 때문에 디버깅이 쉽습니다.작업이 완료될 때까지 기다리기 때문에 결과를 쉽게 예측할 수 있습니다.코드가 단순하며 직관적입니다.단점작업이 끝날 때까지 대기하기 때문에, CPU 자원을 낭비하고 시스템 성능이 저하될 수 있습니다.여러 작업을 처리할 때, 모든 작업이 순차적으로 실행되기 때문에 처리 시간이 길어질 수 있습니다.🏎️ 비동기 프로그래밍의 장단점장점비동기 방식은 작업을 처리하고 있는 동안에도 다른 작업을 처리할 수 있기 때문에 시스템 성능을 향상시킬 수 있습니다.비동기 방식은 I/O 작업과 같은 느린 작업을 처리할 때 효과적입니다.단점코드의 복잡도가 증가할 수 있습니다.디..
-
C++20 코루틴 기능을 활용한 비동기 프로그래밍 예제프로그래밍/C/C++ 2023. 2. 23. 10:03
✨C++로도 비동기 프로그래밍을 구현할 수 있어요!✨C++11부터는 C++ 표준 라이브러리에 스레드, 뮤텍스, 조건 변수와 같은 다중 스레드 지원 기능이 추가되어, 비동기 프로그래밍을 구현할 수 있게 되었어요! 또한 C++11에서는 표준 라이브러리에 비동기 처리를 위한 기능들을 추가했습니다.C++11에서 추가된 비동기 처리 기능은 std::async, std::future, std::promise, std::packaged_task 등이 있어요. std::async를 사용하면 비동기 함수 호출을 간단하게 작성할 수 있고, std::future를 사용하여 비동기 함수 호출 결과를 받을 수 있어요. 또한, std::promise와 std::packaged_task를 사용하여 비동기 함수 호출 결과를 만들고 ..
-
C++ std::thread와 std::mutex를 사용한 멀티스레딩 예제프로그래밍/C/C++ 2023. 2. 22. 11:23
std::thread는 C++11부터 추가된 표준 라이브러리 클래스로, 멀티스레드 프로그래밍을 쉽게 구현할 수 있도록 도와줍니다.std::thread 클래스는 스레드를 생성하고, 실행시키며, 종료시키는 등의 다양한 기능을 제공합니다. std::thread를 사용하면, 별도의 스레드를 생성하여 해당 스레드에서 작업을 수행할 수 있습니다. 예를 들어, 주 스레드에서는 사용자 인터페이스를 처리하고, 별도의 스레드에서는 파일 입출력 또는 계산 등의 작업을 수행하는 것이 가능합니다. std::thread는 스레드 생성 시 실행될 함수(또는 람다 표현식)와 인수를 전달하여 스레드를 생성할 수 있습니다. 생성된 스레드는 join 함수를 사용하여 종료될 때까지 대기하거나, detach 함수를 사용하여 분리(detach..
-
C++ std::ofstream 사용하는 방법프로그래밍/C/C++ 2023. 2. 7. 16:10
📝C++에서는 ofstream클래스를 사용하여 파일에 쓸 수 있습니다. 이 ofstream 클래스는 표준 C++ 라이브러리의 일부이며 파일에 쓰기 위한 스트림 기반 인터페이스를 제공합니이 ofstream클래스는 다음을 포함하여 파일에 데이터를 쓰기 위한 여러 멤버 함수를 제공합니다.open: 쓰기용 파일을 엽니다.write: 데이터 블록을 파일에 씁니다.put: 파일에 단일 문자를 씁니다.operator객체 로 파일을 열고 ofstream 새 데이터를 작성하여 파일의 내용을 업데이트할 수 있습니다.파일 끝에 ios::app 데이터를 추가하려면 플래그 를 사용하여 파일을 열 수 있습니다 💡#include #include int main(){ std::ofstream outfile; outf..
-
LANShare 파일 전송 프로토콜 구축 - 프로토콜 정립토이프로젝트/LANShare 2023. 2. 5. 20:52
일반적으로 소켓통신을 하더라도, 송신자가 Send(..) 를 하더라도 해당 내용이 바로 원하는 클라이언트에게 전송되는게 아니라, 송신 버퍼에 저장이 되었다가 어느정도 쌓인 경우 전달한다. 수신자가 Recv(..) 를 하더라도 수신버퍼에 쌓여있는 데이터를 읽어온다. 그렇다면 수신자가 어떤 행위를 해야할까? 라는 생각을 했을 때 다음과 같은 생각이 들었다. 1. 송신자, 수신자가 둘 다 처음 받는 8바이트는 메타데이터 정보이다. 2. 인지를 하고 있다면 해당 메타데이터의 정보를 보고 원하는 데이터만큼 수신을 한다. 이 상태라면 원하는 데이터를 다 받을 수 있을 것 같았다. 위 그림과 같이 명령어 정보와 수신해야할 데이터의 크기 정보만 보내 후에 원래 보내고자 했던 데이터를 잘라서 보내던 통으로 보내던 계속해..
-
LANShare 파일 전송 프로토콜 구축 - 문제점 발생토이프로젝트/LANShare 2023. 1. 27. 19:27
이전에 설계 했던 프로토콜의 문제점이 한가지 있다. 이런 형태로 정보를 송신할 경우 다음과 같은 문제가 생긴다. 데이터를 보내는건 좋은데, 문제점이 소켓 내부적으로 처리하는 방법이 다르다. TCP 통신에서는 Application이 메세지를 보낸다고(Send) 하더라도 바로 전송되는 것이 아니다. 소켓 버퍼(Send Socket Buffer) 라는 버퍼에 쌓인 후 적절한 시기에 상대방에세 메세지가 전송되고 버퍼가 지워진다. 받는쪽에서도 마찬가지로 메세지가 오면 일단, 소켓버퍼에 저장된 후 Application에서 Read 함수를 호출 할 때 소켓 버퍼에 쌓인 메세지를 읽어들인다. 그럼 저런식으로 보낸 메세지가 만약 8바이트라고 가정해보자. 1. 앞에 4바이트는 명령어 정보 2. 뒤에 4바이트는 추가적인 정..
-
LANShare 파일 전송 프로토콜 구축토이프로젝트/LANShare 2023. 1. 23. 22:41
LANShare 파일 전송 프로토콜 구축 내용 의미 있는 파일이 생성되는 순서는 다음과 같다. 빈 파일을 생성한다. 파일에 데이터를 추가한다. 파일이 의미있는 파일이 되기 위해서는 위와 같은 과정을 거쳐야한다. CreateFile을 통해 저장될 파일을 생성한다. (이때 CreateFile이 호출이 된 시점에서의 파일 크기는 0바이트 이다.) 이후, WriteFile을 사용하여, 이전에 생성된 파일에 데이터를 추가한다. 모든 데이터를 추가한 경우 비로소 유효한 파일이 된다. 서버와 클라이언트의 관점에서 보면 다음과 같다. 서버는 P2P에 접속된 클라이언트에게 파일생성하라는 명령을 보낸다. 이때, 클라이언트는 데이터를 받았을 때, 이 데이터가 어떤 데이터 인지는 모른다. 그러므로, 미리 정의된 프로토콜을 기..
-
LANShare 프로젝트 소개토이프로젝트/LANShare 2023. 1. 23. 20:16
이 프로젝트는 다음과 같은 사례에서 시작되었습니다. 일반적으로 대학교에서는 새로운 프로그램을 도입할 경우, 해당 프로그램을 사람이 직접 설치를 해야합니다. 하지만, 이러한 방식은 상당히 레거시합니다. 반복적이며 불필요한 시간을 할애해야 합니다. 더욱 스마트하고, 간편한 방법을 사용할 수 있어야합니다. 만약, 어떠한 파일을 받기위해, 누군가가 직접 다음 강의를 위해 프로그램을 삭제하거나 재설치하는 번거로움이 존재해서는 안됩니다. 이러한 부분을 최소화 하기 위해, FTP 서버를 열고 많은 클라이언트가 접속해서 파일을 받아간다면 어떨까요? 하지만, 이러한 방법은 1가지일을 100번반복하기 위해 적은인원이 하기에는 상당히 번거롭습니다. 그렇다면, LANShare 프로젝트를 통해, 클라이언트 PC들의 전원을 키고..