client multi-threading