(Как Jon Skeet, большая часть этого принимает.NET)
Рискуя тем, чтобы казаться спорным, комментирует как они, просто беспокоят меня:
Обучение записать многопоточные программы правильно является чрезвычайно трудным и трудоемким.
Потоков нужно избежать, если это возможно...
практически невозможно записать программное обеспечение, которое делает что-либо значительное, не усиливая потоки в некоторой способности. Если Вы находитесь в Windows, открываете свой Диспетчер задач, включаете столбец Thread Count, и можно, вероятно, считать с одной стороны количество процессов, которые используют единственный поток. Да, не нужно просто использовать потоки ради использования потоков, и при этом оно не должно быть сделано высокомерно, но откровенно говоря, я полагаю, что эти клише используются слишком часто.
, Если бы я должен был изложить многопоточное программирование кратко для истинного новичка, я сказал бы это:
Таким образом, я сказал бы, что поточная обработка не является трудной, но это может быть утомительно. Однако, правильно потоковое приложение будет более быстро реагирующим, и Ваши пользователи будут самыми благодарными.
РЕДАКТИРОВАНИЕ: нет ничего "чрезвычайно трудного" о ThreadPool. QueueUserWorkItem (), асинхронные делегаты, различные пары метода BeginXXX/EndXXX, и т.д. в C#. В любом случае эти методы делают очень легче выполнить различные задачи потоковым способом. Если у Вас есть приложение GUI, которое делает любую тяжелую базу данных, сокет или взаимодействие ввода-вывода, практически невозможно сделать фронтенд быстро реагирующим пользователю, не усиливая потоки негласно. Методы, которые я упомянул выше, делают это возможным и являются бризом для использования. Важно понять ловушки, быть уверенным. Я просто полагаю, что мы делаем программистов, особенно младшие, плохая услуга, когда мы говорим о том, как "чрезвычайно трудное" многопоточное программирование или как потоков "нужно избежать". Комментарии как они упрощают проблему и преувеличивают миф, когда истина - то, что поточная обработка никогда не была легче. Существуют законные причины использовать потоки, и клише как это просто кажутся контрпродуктивными мне.
I recommend one of three approaches:
Avoid storing the password at all by using authentication tokens. In this model, the user logs in one time, and the server generates a unique, large, sparse token that the client can store and use as its login "password." The server only accepts this token from one client at a time, so if two clients try to use it simultaneously, the token is invalidated. The token is also generally invalidated after a period of time (1 week, 2 weeks, a year, whatever is appropriate). When the token is invalidated, the user must log in again by hand and the process is repeated. This is basically the approach of Gmail and similar web site logins.
If you must store the password, I recommend relying on the OS to manage it for you. Windows and Mac both have good secure storage systems (DPAPI and Keychain respectively). Linux doesn't have a good always-available solution, though, so it depends on your market. The advantage of using the OS is that the OS can provide protections you can't easily provide yourself, and the user can centrally manage the overall protection of the OS storage (using smartcards, etc.) to a level you are unlikely to reproduce. The OS secure stores are also typically quite convenient for the user.
If neither of these are options, then store an encrypted file with a master password that the user must enter every time they launch your app. This is how Firefox works (or at least it did last time I looked, which has been a while). This is reasonably secure, but much less convenient for the user (and low convenience often means low adoption by the users, or poor use through simpler passwords, etc). I would investigate the Firefox code as an example of how to implement this.
Лучшим способом было бы положиться на кого-то другого для их хранения. и вместо этого доверять этой партии. Но если вам нужен контроль, я бы посоветовал прочитать хорошую книгу о безопасных системах, а затем подумать еще раз. Необходимо учитывать множество переменных, и в большинстве случаев вы просто снижаете риск по сравнению с затратами.